根据父列表将值分组到列表中

Grouping values into lists based on parent list

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

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

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

您需要先创建空列表并将数字放入此列表,然后再将其附加到 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)

您可以使用 List Comprehension with a 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]]

详情:

filter(function, iterable)

Construct a list from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator.