【问题标题】:Grouping values into lists based on parent list根据父列表将值分组到列表中
【发布时间】:2016-01-26 04:52:11
【问题描述】:

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

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]&lt;i&lt;list2[0] 的所有值,第二个采用 list1[1]&lt;i&lt;list2[1] 的所有值,依此类推...(通过 list1[n]&lt;i&lt;list2[n] )?在这种情况下,输出将是:

>>>[[3],[6,7]]

【问题讨论】:

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


    【解决方案1】:

    您可以使用 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]]
    

    详情:

    过滤器(函数,可迭代)

    iterable 的那些元素构造一个list,函数返回true。 iterable 可以是一个sequence、一个支持迭代container,或者是一个迭代器。

    【讨论】:

    • 对于初学者来说太多了,我在没有过滤器/lambda的情况下将列表理解版本添加到了我的答案中
    • 我认为我已经提供了足够多的文档。顺便说一句,我不认为学习太多。
    • 这就是你复制我的解决方案的原因:)
    【解决方案2】:

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

    【讨论】:

    • 看到你按Save后回复了
    • @minitoto lambdafilter 很好,但很难向初学者解释 :)
    【解决方案3】:

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

    【讨论】:

    • 有助于将列表理解放在完整版本旁边以进行比较。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多