我是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
请帮助我。提前谢谢^^
答案 0 :(得分:1)
您尝试在整数上使用索引运算符导致错误:i+1[1]
。您可以使用zip
和islice
迭代列表中的对,而不是使用索引:
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