endpoint1 = [1,2,3]
endpoint2 = [4,5,6]
path = list(random.randrange(0,9) for x in range(10))
确保上述代码中“路径”列表的2个端点包含“endpoint1”和“endpoint2”中的元素的最pythonic方法是什么
像这样,但更漂亮:
if path[0] in endpoint1:
if path[-1] in endpoint2:
print "valid"
if path[0] in endpoint2:
if path[-1] in endpoint1:
print "valid"
答案 0 :(得分:2)
嗯,你可以用一个表达式完成整个事情。
if path[0] in endpoint1 and path[-1] in endpoint2 or \
path[0] in endpoint2 and path[-1] in endpoint1:
我认为它不会比那更好。
答案 1 :(得分:1)
如果有效端点只有少数并且您想测试多条路径,那么预先生成所有可能的端点对可能不会太昂贵:
import itertools
valid_endpoints = set(itertools.product([1, 2, 3], [4, 5, 6]))
valid_endpoints.update([(b, a) for (a, b) in valid_endpoints])
many_paths = ... # get many paths from somewhere
for path in many_paths:
if (path[0], path[-1]) in valid_endpoints:
print 'valid!'
答案 2 :(得分:1)
根据您执行此检查的不同位置,最明确的方法可能是创建一个如下使用的函数:
if valid_path(path):
print "valid"
然后可以实现valid_path
的内部结构(但John的答案和pillmuncher都是合理的选择),但实际上请求有效性检查的代码的读者不会需要担心这些细节。
答案 3 :(得分:0)
如果您的目标是创建一个名为路径的列表来验证所表达的要求,您可以这样做:
endpoint1 = [1,2,3]
endpoint2 = [4,5,6]
path = map(random.choice, random.sample((endpoint1,endpoint2),2))
path[1:1] = list(random.randrange(0,9) for x in range(8))
random.sample((endpoint1,endpoint2),2)
是随机获取(endpoint1,endpoint2)或(endpoint2,endpoint1)因此路径[0] 在 endpoint1 或在 endpoint2 ,而路径[-1] 是另一个端点列表