繁体   English   中英

用其他列表的某些条件制作列表的新列表

[英]Making new list of list with some condition of other list

我是python的新手,仍然在为之奋斗。 你们可以帮我吗?

我有以下列表列表:

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

但我收到此错误消息。

TypeError: 'int' object has no attribute '__getitem__'

请帮助我。 预先谢谢^^

您正在尝试对整数使用索引运算符,这会导致错误: 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)

首先,我假设以前是指要迭代的当前元素。 另外,我想提到的是,您有一个列表列表,而不是一组元组。 由于python具有类似的关键字,因此在使用这些单词时应格外小心。 现在谈论你的问题

问题是您要遍历“ int”而不是列表。 当您i in sorted_Region执行i in sorted_Region “ i”是该列表的元素,而不是其迭代器。 因此,您可以执行以下操作

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)

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

要迭代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
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM