won*_*ng2 1 python python-itertools
我有一个清单:
nums = [1, 2, 3, 4]
我想获得分割列表的所有可能性1 - 3:
[
    ( 1, (2, 3, 4) ),
    ( 2, (1, 3, 4) ),
    ( 3, (1, 2, 4) ),
    ( 4, (1, 2 ,3) )
]
现在我能找到的最好的就是使用itertools.combinations(num, 3),但它只会给出每个项目的第二部分,这意味着[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)].我可以使用其他方法吗?
根据您解决的问题的一般程度,解决方案可以或多或少简单:)
In [1]: nums = [1, 2, 3, 4]
In [2]: [(x, tuple(y for y in nums if y != x)) for x in nums]
Out[2]: [(1, (2, 3, 4)), (2, (1, 3, 4)), (3, (1, 2, 4)), (4, (1, 2, 3))]
如果列表中有重复值,请使用索引进行比较:
In [3]: [(x, tuple(y for j, y in enumerate(nums) if j != i)) for i, x in enumerate(nums)]
Out[3]: [(1, (2, 3, 4)), (2, (1, 3, 4)), (3, (1, 2, 4)), (4, (1, 2, 3))]
| 归档时间: | 
 | 
| 查看次数: | 310 次 | 
| 最近记录: |