Ehs*_*Kia 6 python list bijection
假设你有一个字符串S和一个列表L中的数字序列,len(S)= len(L).
检查是否可以在字符串的字符与序列中的数字之间找到双射,以使每个字符与一个且仅一个数字匹配,这是最干净的方法.
例如,"aabbcc"应与115522匹配,但不匹配123456或111111.
我有一个复杂的设置,有两个dicts和循环,但我想知道是否有一个干净的方法,可能通过使用Python库中的一些函数.
我会用一套:
In [9]: set("aabbcc")
Out[9]: set(['a', 'c', 'b'])
In [10]: set(zip("aabbcc", [1, 1, 5, 5, 2, 2]))
Out[10]: set([('a', 1), ('c', 2), ('b', 5)])
Run Code Online (Sandbox Code Playgroud)
当且仅当映射是满射时,第二组的长度将等于第一组.(如果不是,你将有两个字母副本映射到第二组中的相同数字,反之亦然)
这是实现这个想法的代码
def is_bijection(seq1, seq2):
distinct1 = set(seq1)
distinct2 = set(seq2)
distinctMappings = set(zip(seq1, seq2))
return len(distinct1) == len(distinct2) == len(distinctMappings)
Run Code Online (Sandbox Code Playgroud)
如果一个序列比另一个序列短,则也将返回true,但是已经建立了有效的映射.如果序列长度必须相同,则应添加一个检查.
归档时间: |
|
查看次数: |
1654 次 |
最近记录: |