根据父列表

时间:2016-01-26 04:52:11

标签: python list python-2.7 nested python-2.x

我有一个列表,我试图与其他两个列表中的值的顺序组合进行比较。下面的代码有效,但输出值在一个单独的列表中。

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]]

3 个答案:

答案 0 :(得分:4)

您可以使用List Comprehensionfilter来执行此操作:

>>> [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元素构造一个iterableiterable可以是sequencecontainer 支持迭代,也可以是迭代器。

答案 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]]