8bi*_*its 28 python recursion comparison list
我试图弄清楚如何比较n个列表以找到共同的元素.例如:
p=[ [1,2,3],
[1,9,9],
..
..
[1,2,4]
>> print common(p)
>> [1]
Run Code Online (Sandbox Code Playgroud)
现在,如果我知道元素的数量,我可以做比较,如:
for a in b:
for c in d:
for x in y:
...
Run Code Online (Sandbox Code Playgroud)
但如果我不知道p有多少元素,那就行不通.我看过这个比较两个列表/sf/answers/97220511/的解决方案
但是花了4个小时试图找到一种方法来实现递归,一个解决方案仍然无法解决,所以任何帮助都将受到高度赞赏!
Sve*_*ach 49
您正在寻找所有子列表的集合交集,并且您应该用于集合操作的数据类型是一个集合:
result = set(p[0])
for s in p[1:]:
result.intersection_update(s)
print result
Run Code Online (Sandbox Code Playgroud)
Ray*_*ger 15
>>> p=[ [1,2,3],
[1,9,9],
[1,2,4]]
>>> set(p[0]).intersection(*p)
set([1])
Run Code Online (Sandbox Code Playgroud)
为什么不呢:
set.intersection(*map(set, p))
Run Code Online (Sandbox Code Playgroud)
结果:
set([1])
Run Code Online (Sandbox Code Playgroud)
或者像这样:
ip = iter(p)
s = set(next(ip))
s.intersection(*ip)
Run Code Online (Sandbox Code Playgroud)
结果:
set([1])
Run Code Online (Sandbox Code Playgroud)
编辑:
从控制台复制:
>>> p = [[1,2,3], [1,9,9], [1,2,4]]
>>> set.intersection(*map(set, p))
set([1])
>>> ip = iter(p)
>>> s = set(next(ip))
>>> s.intersection(*ip)
set([1])
Run Code Online (Sandbox Code Playgroud)
一个简单的解决方案(单行)是:
set.intersection(*[set(list) for list in p])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25569 次 |
| 最近记录: |