说我有两个清单
[['1', '2', '1', '3', '1', '3'], ['A', 'G', 'T', 'T', 'T', 'G']]
在这种情况下,每个索引与左侧的数字和右侧的字母匹配,因此1:A和2:G,依此类推。我想看看左边是否至少有一个数字改变了映射。所以,我想知道任何数字是否会改变映射。因此,如果1:A变为1:T,我会返回True。
答案 0 :(得分:2)
您可以创建字典:
s = [['1', '2', '1', '3', '1', '3'], ['A', 'G', 'T', 'T', 'T', 'G']]
new_s = {b:a for a, b in zip(*s)}
final_vals = [a for a, b in new_s.items() if any(d == b for c, d in new_s.items() if c != a)]
输出:
['A', 'T']
答案 1 :(得分:0)
实际上在字典中执行分配,每当更改现有条目时停止。
def check_overwrite(keys, values):
d = {}
for k,v in zip(keys, values):
if d.setdefault(k, v) != v:
return True
return False
print check_overwrite(['1', '2', '1', '3', '1', '3'], ['A', 'G', 'T', 'T', 'T', 'G'])
答案 2 :(得分:0)
如果你想知道它是否不仅改变了,而且改变了这一点(从上面被盗)应该有帮助
>>> numbers = ['1', '2', '1', '3', '1', '3']
>>> letters = ['A', 'G', 'T', 'T', 'T', 'G']
>>> def check_overwrite(keys, values):
... d = {}
... overlap = {}
... for k,v in zip(keys, values):
... if d.setdefault(k, v) != v:
... overlap[k] = v
... return overlap
...
>>> check_overwrite(numbers, letters)
{'1': 'T', '3': 'G'}