用其他列表的某些条件创建列表的新列表

时间:2016-06-29 02:29:01

标签: python list conditional-statements

我是python的新手,仍然在努力。 那么你们可以帮助我吗?

我有这个列表清单:

path.replace(/foo\/bar\/(.*)\/somethingelse/, 'foo/bar/($1|{id}|\*)/somethingelse')
db.collection.find({path: new RegExp(path)})

我想创建条件列表的新列表: 如果下一个列表的第二个元素值大于或等于当前列表的第二个元素,则下一个列表的第三个元素值小于当前列表的第三个元素。

我试过这段代码

sorted_Region:  [[J, 0.80, 0.30], [H, 0.80, 0.21], [I, 0.87, 0.19], [G, 0.88, 0.15], [D, 0.96, 0.14], [B, 0.97, 0.14], [A, 1.01, 0.11], [C, 1.05, 0.15], [F, 1.06, 0.04], [E, 1.55, 0.22]]

但是我收到了此错误消息。

Region_frontier = []
for i in sorted_Region:
    if i+1[1] >= i[1] and i+1[2] < i[2]:
        Region_frontier.append(i)
print Region_frontier
请帮助我。提前谢谢^^

4 个答案:

答案 0 :(得分:1)

您尝试在整数上使用索引运算符导致错误:i+1[1]。您可以使用zipislice迭代列表中的对,而不是使用索引:

from itertools import islice

Region_frontier = []
for prev, cur in zip(sorted_Region, islice(sorted_Region, 1, None)):
    if cur[1] >= prev[1] and cur[2] < prev[2]:
        Region_frontier.append(cur)

答案 1 :(得分:1)

首先,我假设之前的是指您正在迭代的当前元素。 另外,我想提一下你有一个列表列表,而不是一组元组。 因为python有这样的关键字所以你在使用这些单词时应该小心。 现在谈论你的问题

问题是你正在迭代&#39; int&#39;不是清单。当你这样做 i in sorted_Region&#39;我&#39;是该列表的元素而不是其迭代器。 所以你可以做以下的

Region_frontier = []
i = 0
while i < len(sorted_Region)-1:
    if sorted_Region[i+1][1] >= sorted_Region[i][1] and sorted_Region[i+1][2] < sorted_Region[i][2]:
        Region_frontier.append(sorted_Region[i])
print(Region_frontier)

答案 2 :(得分:0)

对于i+1[1],获取&#39; int&#39;的索引项对象是语法错误。出于预期目的,sorted_Region的for循环中没有索引,因此无法获得&#34; previous tuple&#34;。

要迭代sorted_Region并与附近的项目进行比较,请尝试使用元组索引(实际索引i,范围从0到len(sorted_Region) - 1):

Region_frontier = []
for i in range(0, len(sorted_Region) - 1):
    if sorted_Region[i+1][1] >= sorted_Region[i][1] and sorted_Region[i+1][2] < sorted_Region[i][2]:
        Region_frontier.append(i)
print Region_frontier

答案 3 :(得分:-1)

for index in range(len(sorted_Region)-1):
    if sorted_Region[index+1][i] >= sorted_Region[index][1] and sorted_Region[index+1][2]<sorted_Region[index][2]:
        Region_frontier.append(i)
print Region_frontier