我有一个创建列表的列表,如
biglist=[['A'], ['C', 'T'], ['A', 'T']]
我将有另一个列表,如
smalllist=[['C'], ['T'], ['A', 'T']]
所以,我想检查一下小清单中的项目是否包含在该列表的特定索引中,如果没有附加到该列表中。
所以,制作
biglist=[['A','C'], ['C', 'T'], ['A', 'T']]
所以,小名单的第一个子列表中的'C'被添加到biglist的第一个子列表中。但不是第二和第三。
我试过
dd=zip(biglist, smalllist)
for each in dd:
ll=each[0].extend(each[1])
templist.append(list(set(ll)))
但得到错误
templist.append(list(set(ll)))
TypeError: 'NoneType' object is not iterable
怎么做?
谢谢
答案 0 :(得分:5)
可能你应该试试这个:
//这只会在小名单短于大名单
的情况下起作用<强> SCRIPT:强>
biglist = [['A'], ['C', 'T'], ['A', 'T']]
smalllist = [['C'], ['T'], ['A', 'T']]
for i, group in enumerate(smalllist):
for item in group:
if item not in biglist[i]:
biglist[i].append(item)
<强>样本:强>
print(biglist)
# [['A', 'C'], ['C', 'T'], ['A', 'T']]
答案 1 :(得分:2)
由于某些原因,Python中的extend
在扩展后不会返回列表本身。因此,ll
就是None
。只需将ll=each[0]
放在循环的第二行,您的解决方案就应该开始工作了。
但是,我没有得到,为什么你不把你的元素放在set
s中。这样可以避免您必须从list
转换为set
然后转换回来。
我只会or
设置而不是附加到列表中,然后通过set
然后转到list
来过滤掉重复项。
>>> from itertools import izip
>>> templist = []
>>> for els1,els2 in izip(biglist,smalllist):
joined = list(set(els1) | set(els2))
templist.append(joined)
>>> templist
[['A', 'C'], ['C', 'T'], ['A', 'T']]
首先将set
s中的元素保存在Python 3中似乎是最快的,即使每组中的元素数量很少(参见注释):
biglist=[set(['A']), set(['C', 'T']), set(['A', 'T'])]
smalllist=[set(['C']), set(['T']), set(['A', 'T'])]
for els1,els2 in zip(biglist,smalllist):
els1.update(els2)
print(biglist)
输出继电器:
[{'A', 'C'}, {'C', 'T'}, {'A', 'T'}]
答案 2 :(得分:2)
[list(set(s+b)) for (s,b) in zip(smalllist,biglist)]