Python - v3.6.3:在列表中查找满足条件的值,然后根据原始值查找满足不同条件的另一个值

时间:2018-03-20 04:26:10

标签: python

我有一个大型列表,其中包含带有文本的坐标值。列表中元素的格式如下所示,它显示元素的索引,x co ord,y co ord和文本值。

  • e.g。 (245,(85,604,' 1 Text _'))

我希望列表中的数字元素与其特定的文本值对齐。例如,

(1,(85,604,' 1 _'))

(2,(85,604,' 2 _'))

(3,(102,604,' 1s Text'))

(4,(102,445,' 2s Text'))

结果列表应该是:

(' 1 _' 1s文字')

(' 2 _' 2s文字)

我在原始列表中搜索一开始就在84-86范围内的元素,这些元素具有特定的正则表达式格式,该格式提取所有在行开头都有数字的元素,并且' _'

这是我遍历列表的方式:

for i in enumerate(row):
    regex = r"(^\d+\s\_)"
    if i[1][0] in range(84,86) and i[1][1] in range(44, 230):
    if re.match(regex, i[1][2], re.MULTILINE):
        //So for the elements that meet this condition above^
          I then want to find the next value that has the range(101,103)
          //I have tried the following but I know this is not the right way to do it
          next(i[1][2] for l in i if i[1][0] in range(101,103)

如果一个元素满足这个条件,那么我想要搜索i [1] [0]的值在101-103范围内的最近元素。

例如

(1,(85,604,' 1 _'))

(2,(85,604,' 2 _'))

(3,(102,604,' Text'))

(4,(102,445,' Text'))

因此对于原始条件,这将获得索引1的值(85,604,' 1 _')然后我希望我的代码然后获得索引3的值(102,604, ' 3 _')因为它是102的下一个值,索引2应该与索引4对齐。

我当前的代码将索引2与索引3对齐,这不是我想要的。

有人可以帮助我迭代这个列表,这样一旦找到原始条件,它就会找到下一个102元素,因此文本与正确的数字对齐。

1 个答案:

答案 0 :(得分:0)

如果您将数据结构转换为专为搜索而设计的内容,那么这个问题将更容易解决并且运行速度更快 - 因此您不必一遍又一遍地遍历整个列表。但是,坚持你所拥有的:

要找到匹配新条件的找到行之后的第一个值,我们可以在找到的行之后开始遍历列表。

john 3
ron 2
kyle 1

顺便说一句,你循环的方式非常奇怪。 for i in enumerate(row): regex = r"(^\d+\s\_)" if i[1][0] in range(84,86) and i[1][1] in range(44, 230): if re.match(regex, i[1][2], re.MULTILINE): for j in enumerate(row[i[0]+1:], i[0]+1): if j[1][0] in range(101, 103): # do stuff with j break else: # handle the case where there was no match 函数的设计使用方式如下:

enumerate

然后,您不需要在for index, value in enumerate(row): i[0]使用i[1]index

或者,如果您根本不需要valueindex),请不要使用i[0]

enumerate

同时,在您的情况下,您可能想要解压缩值,而不仅仅是索引和值

因此,更可读的写作方式是:

for value in row: