根据两组有效条目检查列表端点的pythonic方法

根据两组有效条目检查列表端点的pythonic方法,python,Python,确保上述代码中“path”列表的两个端点同时包含“endpoint1”和“endpoint2”中的元素的最简单的方法是什么 像这样,但更漂亮: endpoint1 = [1,2,3] endpoint2 = [4,5,6] path = list(random.randrange(0,9) for x in range(10)) 好吧,你可以用一种表达方式来表达整个事情 if path[0] in endpoint1: if path[-1] in endpoint2:

确保上述代码中“path”列表的两个端点同时包含“endpoint1”和“endpoint2”中的元素的最简单的方法是什么

像这样,但更漂亮:


endpoint1 = [1,2,3]
endpoint2 = [4,5,6]
path = list(random.randrange(0,9) for x in range(10))

好吧,你可以用一种表达方式来表达整个事情


if path[0] in endpoint1:
    if path[-1] in endpoint2:
        print "valid"

if path[0] in endpoint2:
    if path[-1] in endpoint1:
        print "valid"




我不认为它会变得比这更好。

好吧,你可以用一个表达式完成整个过程


if path[0] in endpoint1:
    if path[-1] in endpoint2:
        print "valid"

if path[0] in endpoint2:
    if path[-1] in endpoint1:
        print "valid"




我认为它不会比这更好。

如果有效端点只有几个,并且您想要测试多条路径,那么预先生成所有可能的端点对可能不会太昂贵:

if path[0] in endpoint1 and path[-1] in endpoint2 or \
   path[0] in endpoint2 and path[-1] in endpoint1:

如果有效端点只有几个,并且您希望测试多条路径,那么预先生成所有可能的端点对可能不会太昂贵:

if path[0] in endpoint1 and path[-1] in endpoint2 or \
   path[0] in endpoint2 and path[-1] in endpoint1:

根据您执行此检查的不同位置,最清晰的方法可能是创建一个要使用的函数,如下所示:

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!'

valid\u path
的内部可以按照您喜欢的方式实现(John的答案和pillmuncher的答案都是合理的选择),但实际请求有效性检查的代码读者不必担心这些细节。

取决于您执行此检查的不同位置,最清晰的方法可能是创建一个函数,如下所示:

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!'

valid\u path
的内部结构可以按照您的意愿实现(John的答案和pillmuncher的答案都是合理的选择),但是实际请求有效性检查的代码读者不必担心这些细节。

如果您的目标是创建一个名为path的列表来验证所表达的需求,您可以执行以下操作:

if valid_path(path):
    print "valid"

random.sample((endpoint1,endpoint2),2)
是随机获得的(endpoint1,endpoint2)(endpoint2,endpoint1)因此路径[0]路径[-1]时位于endpoint1endpoint2是另一个端点列表

如果您的目标是创建一个名为路径的列表来验证所表达的需求,您可以执行以下操作:

if valid_path(path):
    print "valid"

random.sample((endpoint1,endpoint2),2)
随机获取(endpoint1,endpoint2)(endpoint2,endpoint1)因此路径[0]位于endpoint1endpoint2路径[-1]是另一个端点列表

gotch,如果那是最简洁的方式,我会同意的。哥们,如果那是最简洁的方式,我会同意的。