簡體   English   中英

以兩組有效條目檢查列表端點的pythonic方法

[英]pythonic way of checking endpoints of a list against two sets of valid entries


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"



那么你可以在一個表達式中完成整個事情。

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

根據您執行此檢查的不同位置,最明確的方法可能是創建要使用的函數,如下所示:

if valid_path(path):
    print "valid"

然后可以實現valid_path的內部結構(John的答案和pillmuncher都是合理的選擇),但實際請求有效性檢查的代碼的讀者不需要擔心這些細節。

如果您的目標是創建一個名為path的列表來驗證表達的需求,您可以:

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)是得到在隨機(端點1,端點2)(端點2,端點1),因此路徑[0]端點1是OR在端點2被同時路徑[-1]是另一端點名單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM