我在练习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
我做错了什么?
答案 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]]