Tap*_*dal 15 python list python-3.x set-union
[[1, '34', '44'], [1, '40', '30', '41'], [1, '41', '40', '42'], [1, '42', '41', '43'], [1, '43', '42', '44'], [1, '44', '34', '43']]
Run Code Online (Sandbox Code Playgroud)
我有一份清单清单.我的目的是检查是否有任何一个子列表与其他子列表有任何共同点(不包括要比较的第一个索引对象).如果它有任何共同点,那么统一这些子列表.
例如,对于这个例子,我的最终答案应该是这样的:
[[1, '34, '44', '40' '30', '41', '42', '43']]
Run Code Online (Sandbox Code Playgroud)
我可以理解我应该将子列表转换为集合,然后使用union()和intersection()操作.但我坚持的是如何比较每个集/子列表.我不能在列表上运行循环并逐个比较每个子列表,因为列表的内容将被修改,这将导致错误.
我想知道的是有没有有效的方法来比较所有子列表(转换为集合)并获得它们的并集?
Ray*_*ger 29
该itertools模块使得这个问题的短期工作:
>>> from itertools import chain
>>> list(set(chain.from_iterable(d)))
[1, '41', '42', '43', '40', '34', '30', '44']
Run Code Online (Sandbox Code Playgroud)
另一种方法是将列表解压缩为union()的单独参数:
>>> list(set().union(*d))
[1, '41', '42', '43', '40', '34', '30', '44']
Run Code Online (Sandbox Code Playgroud)
后一种方法消除了所有重复,并且不要求首先将输入转换为集合.此外,它不需要导入.
Ami*_*ory 20
使用解包操作符*:
>> list(set.union(*map(set, a)))
[1, '44', '30', '42', '43', '40', '41', '34']
Run Code Online (Sandbox Code Playgroud)
(感谢Raymond Hettinger的评论!)
(注意
set.union(*tup)
Run Code Online (Sandbox Code Playgroud)
将打开包装
set.union(tup[0], tup[1], ... tup[n - 1])
Run Code Online (Sandbox Code Playgroud)
)
| 归档时间: |
|
| 查看次数: |
17533 次 |
| 最近记录: |