我有以下代碼:
paths = [['E', 'D', 'A', 'B'], ['E', 'D', 'A', 'C', 'B'], ['E', 'D', 'B'], ['E', 'D', 'C', 'B'], ['E', 'B'], ['E', 'C', 'B']]
現在,串列中的串列表示使用 Networkx 制作的從頭到尾的節點路徑,但這是一些背景資訊。我的問題更具體。
我正在嘗試匯出只有來自 AE 的每個字母的串列,也就是它只會回傳串列:
paths_desired = [['E', 'D', 'A', 'C', 'B']]
如果我有另一條路:
paths = [['E', 'D', 'A', 'B'], ['E', 'D', 'A', 'C', 'B'], ['D', 'B', 'A','C','E'], ['A', 'D', 'C', 'B']]
它會回傳:
paths_desired = [['E', 'D', 'A', 'C', 'B'],['D', 'B', 'A', 'C', 'E']]
我的想法是遍歷每個串列的 for 回圈:
for i in pathways:
counter = 0
for j in letters:
if j in i:
counter = counter 1;
if counter == 5:
desired_paths.append(i)
print(desired_paths)
這可行,但是,我想讓回圈更具體,這意味著我只想要具有以下順序的串列:['E','D','A','C','B'],即使所有這些字母出現在路徑串列中的不同串列中。
此外,有沒有一種方法可以升級我的 for 回圈,這樣我就不會計數,而是檢查字母是否在那里,并且每個字母不超過 1 個?意味著沒有多個 E,沒有多個 D,等等。
uj5u.com熱心網友回復:
您可以像這樣使用 use aset和.issubset():
def pathways(letters, paths):
ret = []
letters = set(letters)
for path in paths:
if letters.issubset(path):
ret.append(path)
return ret
letters = ['A', 'B', 'C', 'D', 'E']
paths = [['E', 'D', 'A', 'B'], ['E', 'D', 'A', 'C', 'B'],
['D', 'B', 'A','C','E'], ['A', 'D', 'C', 'B']]
print(pathways(letters, paths)) # => [['E', 'D', 'A', 'C', 'B'], ['D', 'B', 'A', 'C', 'E']]
此外,正如ShadowRanger的評論指出的那樣,pathways()可以使用filter(). 像這樣:
def pathways(letters, paths):
return list(filter(set(letters).issubset, paths))
letters = ['A', 'B', 'C', 'D', 'E']
paths = [['E', 'D', 'A', 'B'], ['E', 'D', 'A', 'C', 'B'],
['D', 'B', 'A','C','E'], ['A', 'D', 'C', 'B']]
print(pathways(letters, paths))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/524093.html
下一篇:為什么我的正則運算式回傳無?
