我有一个表单(a,b,c,d)的元组列表,我想只将那些具有唯一值'a'的元组复制到一个新列表中。我对python很新。
当前的想法不起作用:
for (x) in list:
a,b,c,d=(x)
if list.count(a)==1:
newlist.append(x)
答案 0 :(得分:3)
如果您不想要添加任何具有重复a
值的元组(而不是添加给定a
的第一个匹配项,而不是后来的那些):
seen = {}
for x in your_list:
a,b,c,d = x
seen.setdefault(a, []).append(x)
newlist = []
for a,x_vals in seen.iteritems():
if len(x_vals) == 1:
newlist.append(x_vals[0])
答案 1 :(得分:2)
values = {}
for t in tups:
a,b,c,d = t
if a not in values:
values[a] = (1, t)
else:
count, tup = values[a]
values[a] = (count+1, t)
unique_tups = map(lambda v: v[1],
filter(lambda k: k[0] == 1, values.values()))
我使用字典存储a
值和具有a
值的元组。该密钥的值是(count, tuple)
的元组,其中count
是a
被查看的次数。
最后,我过滤了values
字典仅那些a
为1的count
值,即它们很独特。然后我映射该列表以仅返回那些元组,因为count
值将为1。
现在,unique_tups
是包含唯一a
个元组的所有元组的列表。
收到评论者的反馈后更新,谢谢!
答案 2 :(得分:2)
您可以使用一套来跟踪重复项:
seen_a = set()
for x in list:
a, b, c, d = x
if a not in seen_a:
newlist.append(x)
seen_a.add(x)
答案 3 :(得分:0)
你确实可以对列表进行排序然后迭代它:
xs = [(1,2,3,4), (5, 2, 3, 4), (2, 3, 3, 3), (1, 5, 2, 3)]
newList = []
xs.sort()
lastX = None
for x in xs:
if lastX:
if lastX[0] == x[0]:
lastX = None
else:
newList.append(lastX)
lastX = x
if lastX:
newList.append(lastX)