获取子集的特定列表

时间:2016-01-25 02:09:17

标签: python python-3.x

我在练习Python,遇到一些我不熟悉的问题

我有array=[1,3,8]的子集:

[[], [1], [3], [1, 3], [8], [1, 8], [3, 8], [1, 3, 8]]

我想只抓取包含2个元素的子集列表,例如:

[1, 3], [1, 8], [3, 8]

实现此目的的正确方法是什么?

我尝试这样做,但它不起作用:

for x in range(len(result)):
    for y in range(len(result[x])>1 and len(result[x]) < 3):
        print (y)

但它仅打印True or False

我做错了什么?

5 个答案:

答案 0 :(得分:2)

你是说这个吗?

results = [[], [1], [3], [1, 3], [8], [1, 8], [3, 8], [1, 3, 8]]

new_list = [element for element in results if len(element) == 2]

print(new_list)

[[1, 3], [1, 8], [3, 8]]

BTW:您可以在一行中创建新列表

medal

答案 1 :(得分:1)

这将有效:

lists = [[], [1], [3], [1, 3], [8], [1, 8], [3, 8], [1, 3, 8]]
for i in lists:
    if len(i) == 2:
        print(i)

结果:

[1, 3]
[1, 8]
[3, 8]

如果要收集包含两个元素的列表而不是仅打印它们,请执行以下操作:

lists = [[], [1], [3], [1, 3], [8], [1, 8], [3, 8], [1, 3, 8]]
two_element_lists = []
for i in lists:
    if len(i) == 2:
        two_element_lists.append(i)
        # If you want to copy the lists instead, 
        # so you can modify them without modifying the original ones:
        # two_element_lists.append(list(i))

答案 2 :(得分:1)

使用对简单列表查询的理解:

results = [[], [1], [3], [1, 3], [8], [1, 8], [3, 8], [1, 3, 8]]

pairs = [r for r in results if len(r) == 2]

答案 3 :(得分:1)

让我们打破你的输入,看看:

len(result[x]) > 1  and len(result[x]) < 3
len(value)     > 1  and len(value)     < 3

           (2) > 1  and   (2)          < 3
                  = True

                   -OR-

           (3) > 1  and   (3)          < 3
                  = False

这里唯一的输出是“真”或“假”。您正在将布尔值传递到您的范围内()。你的迭代器变得不那么实用了:

for y in range(True)
for y in range(False)

修改您的条件。

答案 4 :(得分:0)

使用filter内置方法也是可行的,但需要将其生成器输出转换为list对象:

>>> l = [[], [1], [3], [1, 3], [8], [1, 8], [3, 8], [1, 3, 8]]
>>> 
>>> list(filter(lambda sub_l:len(sub_l)==2, l))
[[1, 3], [1, 8], [3, 8]]