比较和匹配python列表
假设我有一个模式列表和一个字符串列表(长度相等)。通过比较字符串列表中每个字符串的位置与模式列表中的模式,我需要返回一个列表,其中包含所有不匹配的字符串。这里有一个例子比较和匹配python列表,python,list,Python,List,假设我有一个模式列表和一个字符串列表(长度相等)。通过比较字符串列表中每个字符串的位置与模式列表中的模式,我需要返回一个列表,其中包含所有不匹配的字符串。这里有一个例子 p = ['1', '0', '0', '1'] s = ['Dog', 'Cat', 'Duck', 'Dog'] p是一种模式,该列表说明位置索引0和索引3中的项目应该匹配,位置索引1和索引2中的项目应该匹配。在这里我们可以看到“狗”和“狗”匹配,但“猫”和“鸭”不匹配。因此,回报将是 [['Cat', 'Duck']]
p = ['1', '0', '0', '1']
s = ['Dog', 'Cat', 'Duck', 'Dog']
p是一种模式,该列表说明位置索引0和索引3中的项目应该匹配,位置索引1和索引2中的项目应该匹配。在这里我们可以看到“狗”和“狗”匹配,但“猫”和“鸭”不匹配。因此,回报将是
[['Cat', 'Duck']]
[]
例如,如果字符串为s=['Dog'、'Cat'、'Cat'、'Dog']
则返回值为
[['Cat', 'Duck']]
[]
还有一些例子:
p = ['1', '1', '0', '0', '1']
s = ['Red', 'Blue', 'Yellow', 'Yellow', 'Blue']
因为索引0、1和4不匹配,所以返回的值将是[['Red','Blue','Blue']]
p = ['1', '1', '1', '1']
s = ['Red', 'Red', 'Red', 'Green']
返回值应该是[[['Red','Red','Red','Green']]
,因为所有索引都需要匹配
p = ['1', '2', '3', '4']
s = ['Red', 'Red', 'Red', 'Red']
由于不需要匹配,因此返回值将为[]
p
中的索引将s
中的字符串分组
groups = {}
for index, item in zip(p, s):
groups.setdefault(index, []).append(item)
[items for items in groups.values() if len(set(items)) != 1]
def get_unmatch(p, s):
groups = {}
for index, item in zip(p, s):
groups.setdefault(index, []).append(item)
return [items for items in groups.values() if len(set(items)) != 1]
[items for items in groups.values() if len(set(items)) != 1]
def get_unmatch(p, s):
groups = {}
for index, item in zip(p, s):
groups.setdefault(index, []).append(item)
return [items for items in groups.values() if len(set(items)) != 1]
而且测试用例很少
assert(get_unmatch(['1', '0', '0', '1'], ['Dog', 'Cat', 'Duck', 'Dog']) == [['Cat', 'Duck']])
assert(get_unmatch(['1', '0', '0', '1'], ['Dog', 'Cat', 'Cat', 'Dog']) == [])
assert(get_unmatch(['1', '1', '0', '0', '1'], ['Red', 'Blue', 'Yellow', 'Yellow', 'Blue']) == [['Red', 'Blue', 'Blue']])
assert(get_unmatch(['1', '1', '1', '1'], ['Red', 'Red', 'Red', 'Green']) == [['Red', 'Red', 'Red', 'Green']])
assert(get_unmatch(['1', '2', '3', '4'], ['Red', 'Red', 'Red', 'Red']) == [])
下面是我使用
set
s的解决方案:
def matcher(p, s):
data = {}
for k,v in zip(p,s):
data.setdefault(k, []).append(v)
for k,v in data.items():
if len(set(v)) != 1:
print v
return
函数matcher
首先创建具有相同索引(“0”或“1”)的值的dict
。此dict
中的示例项将是1->['Dog','Dog']
。在列表上调用set
将只保留1个项目,因为所有列表项目都是相同的Dog
。如果它们不相同,len(set(v))
将返回一个包含多个项目的集合,我们将打印此列表
样本输入:
样本输出: