假设我有一个列表:
l = [0, 1, 2, 3]
如何遍历列表,从列表中获取每个项目及其补充项?那是,
for item, others in ...
print(item, others)
会打印
0 [1, 2, 3]
1 [0, 2, 3]
2 [0, 1, 3]
3 [0, 1, 2]
理想情况下,我正在寻找可以在理解中使用的简洁表达式。
假设我有一个列表:
l = [0, 1, 2, 3]
如何遍历列表,从列表中获取每个项目及其补充项?那是,
for item, others in ...
print(item, others)
会打印
0 [1, 2, 3]
1 [0, 2, 3]
2 [0, 1, 3]
3 [0, 1, 2]
理想情况下,我正在寻找可以在理解中使用的简洁表达式。
这很容易理解:
for index, item in enumerate(l):
others = l[:index] + l[index+1:]
如果你坚持,你可以用它做一个迭代器:
def iter_with_others(l):
for index, item in enumerate(l):
yield item, l[:index] + l[index+1:]
给出它的用法:
for item, others in iter_with_others(l):
print(item, others)
回答我自己的问题,可以itertools.combinations
利用结果按字典顺序发出的事实:
from itertools import combinations
zip(l, combinations(reversed(l), len(l) - 1))
但是,这相当模糊。nightcracker 的解决方案对于读者来说更容易理解!
关于什么
>>> [(i, [j for j in L if j != i]) for i in L]
[(0, [1, 2, 3]), (1, [0, 2, 3]), (2, [0, 1, 3]), (3, [0, 1, 2])]
好的,这是大量的测试,@nightcracker 的解决方案可能更有效,但是呃......