如何检查变量是否已更改?

时间:2017-12-01 18:16:07

标签: python

说我有两个清单

[['1', '2', '1', '3', '1', '3'], ['A', 'G', 'T', 'T', 'T', 'G']]

在这种情况下,每个索引与左侧的数字和右侧的字母匹配,因此1:A和2:G,依此类推。我想看看左边是否至少有一个数字改变了映射。所以,我想知道任何数字是否会改变映射。因此,如果1:A变为1:T,我会返回True。

3 个答案:

答案 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'}