#Test if each element of `b` is also an element of `a`
def contains(a, b):
for v in b:
ok = False
for u in a:
if v == u:
ok = True
break
if not ok:
return False
return True
这可以通过将else子句附加到内部for循环来压缩:
def contains(a, b):
for v in b:
for u in a:
if v == u:
break
else:
return False
return True
但是我们可以通过使用内置的any函数和生成器表达式来缩短它:
def contains(a, b):
for v in b:
if not any(v == u for u in a):
return False
return True
请注意,any(v == u for u in a)一旦找到与v匹配的u,就会停止测试。你知道吗
现在进行完全匹配测试。这段代码适用于python2或python3。你知道吗
from __future__ import print_function
def contains(a, b):
for v in b:
if not any(v == u for u in a):
return False
return True
def match(a, b):
return contains(a, b) and contains(b, a)
target = [1,2,3,4,5]
data = ([3,5,1,2,4], [1,2,3,4,5,6], [1,2,3,4,6], [3,1,2,1,4])
print(target)
for seq in data:
print(seq, contains(target, seq), contains(seq, target), match(target, seq))
明智的方法是使用集合。但是如果您坚持通过循环来降低效率,那么您需要检查第一个列表的每个元素是否都是第二个列表的元素,反之亦然。你知道吗
这里有三种方法来做检查。请注意(与前面问题中的代码不同),我直接遍历list元素;在Python中,这个任务不需要使用list索引。你知道吗
首先,我们使用显式标志
ok
来跟踪匹配。你知道吗这可以通过将
else
子句附加到内部for
循环来压缩:但是我们可以通过使用内置的
any
函数和生成器表达式来缩短它:请注意,
any(v == u for u in a)
一旦找到与v
匹配的u
,就会停止测试。你知道吗现在进行完全匹配测试。这段代码适用于python2或python3。你知道吗
输出
我会用这样的方法:
或者,如果你想找更复杂但更简短的东西,我会这么说:
注意:对不起,所有的编辑,有一个逻辑缺陷,在第二个方法,这将导致真正的返回,只有当最后一个元素的a是在b。这将工作的两个。你知道吗
既然您提供了一个示例,我就在这里使用它。你知道吗
你可以用itertools.groupby组()获取列表的唯一值,然后比较它们(排序)。这样,你就可以很容易地看到他们是否匹配。你知道吗
L2变为[1,2,3]。你知道吗
所以现在就做吧
(以防未分类)
希望这就是你要找的。。。你知道吗
相关问题 更多 >
编程相关推荐