我有一个列表,我试图与其他两个列表中的值的顺序组合进行比较。下面的代码有效,但输出值在一个单独的列表中。
values = [3,6,7,8]
list1 = [2,5]
list2 = [4,8]
main = []
for i in values:
for x,y in zip(list1, topElevation):
if x<i<y:
main.append(i)
>>>[3,6,7]
如何组织脚本以便将值拆分为多个列表,以便第一个嵌套列表获取list1[0]<i<list2[0]
,第二个list1[1]<i<list2[1]
的所有值,等等...(通过list1[n]<i<list2[n]
)?在这种情况下,输出将是:
>>>[[3],[6,7]]
答案 0 :(得分:4)
您可以使用List Comprehension和filter来执行此操作:
>>> [filter(lambda x: l < x < r, values) for l, r in zip(list1, list2)]
[[3], [6, 7]]
请注意,filter(function, iterable)
相当于[item for item in iterable if function(item)]
等效解决方案:
>>> [[item for item in values if l < item < r] for l, r in zip(list1, list2)]
[[3], [6, 7]]
详细说明:
过滤(功能,可迭代)
从那些函数返回true的
list
元素构造一个iterable
。iterable
可以是sequence
,container
支持迭代,也可以是迭代器。
答案 1 :(得分:3)
您需要创建空列表并将数字放入此列表,然后再将其附加到main
。而且你必须以不同的顺序使用for
循环。
values = [3,6,7,8]
list1 = [2,5]
list2 = [4,8]
main = []
for x, y in zip(list1, list2):
temp = []
for i in values:
if x<i<y:
temp.append(i)
main.append(temp)
print(main)
答案 2 :(得分:2)
了解List Comprehension。 你可以在这里使用它:
values = [3,6,7,8]
list1 = [2,5]
list2 = [4,8]
print [[i for i in values if x<i<y] for x,y in zip(list1, list2)]
或稍微改变你的代码:
main = []
for x,y in zip(list1, list2):
mid = []
for i in values:
if x<i<y:
mid.append(i)
main.append(mid)
print main
两种情况下的输出:
[[3], [6, 7]]