Nic*_*mer 1 python list unique
在Python中,我有一个元组列表和一个长度相同的整数列表,例如,
a = [
[1, 2],
[3, 2],
[4, 66],
[2, 3]
]
b = [
1,
31,
31,
44
]
Run Code Online (Sandbox Code Playgroud)
第k个条目a可以被认为与第k个条目相关联b.
条目[3, 2]和[2, 3]真的对我来说是相同的,我想a考虑到这一点uniquified.另外,我想要一个属于新唯一列表的条目列表.对于上面的例子,
a2 = [
[1, 2],
[3, 2], # or [2, 3]
[4, 66]
]
b2 = [
[1],
[31, 44],
[31]
]
Run Code Online (Sandbox Code Playgroud)
b2[0]是[1]因为[1, 2]只与相关1.b2[1]是[31, 44]因为[2, 3](等于[3, 2]与相关联31并44在a.
可以通过a条目进入,使每个2列表成为冻结集,将其排序成字典等.不用说,如果a并且b很大,这不会很好.
关于如何处理这个更智能的任何提示?(列表理解?)
如果你想维护秩序和组,我认为你不会比使用OrderedDict分组更好:
from collections import OrderedDict
a = [
[1, 2],
[3, 2],
[4, 66],
[2, 3]
]
b = [1, 31, 31, 44]
d = OrderedDict()
for ind, f in enumerate(map(frozenset, a)):
d.setdefault(f, []).append(b[ind])
print(list(d), list(d.values()))
Run Code Online (Sandbox Code Playgroud)
哪个会给你:
[frozenset({1, 2}), frozenset({2, 3}), frozenset({66, 4})] [[1], [31, 44], [31]]
Run Code Online (Sandbox Code Playgroud)
如果看到的顺序无关紧要,请使用defaultdict:
from collections import defaultdict
a = [
[1, 2],
[3, 2],
[4, 66],
[2, 3]
]
b = [1, 31, 31, 44]
d = defaultdict(list)
for ind, f in enumerate(map(frozenset, a)):
d[f].append(b[ind])
print(list(d), list(d.values()))
Run Code Online (Sandbox Code Playgroud)
哪个会给你:
[frozenset({1, 2}), frozenset({2, 3}), frozenset({66, 4})] [[1], [31, 44], [31]]
Run Code Online (Sandbox Code Playgroud)
如果你真的想要列表或元组:
print(list(map(list, d)), list(d.values()))
Run Code Online (Sandbox Code Playgroud)
哪个会给你:
[[1, 2], [2, 3], [66, 4]] [[1], [31, 44], [31]]
Run Code Online (Sandbox Code Playgroud)
对于python2,你应该使用itertools.izip和itertools.imap代替map和zip.
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |