簡體   English   中英

如何根據每個元組中第一個數字的值從元組列表中彈出項目?

[英]How do I pop item off a list of tuples, based on the value of the first number in each tuple?

我正在嘗試創建一個包含一組數字的所有變體的元組列表。 但是,我想從列表中刪除任何序列相同但偏移一兩個位置的變體。 例如: (-1,1,2) , (1,2,-1) & (2,-1,1)我只想要第一個。

這是我要做的:

import itertools as it

list = [-1, 0, 1, 2]
cycles = []

list_cycle_3 = it.permutations(cycles, 3)
list_cycle_4 = it.permutations(cycles, 4)

for item in list_cycle_3:
    cycles.append(item)

for item in list_cycle_4:
    cycles.append(item)

print(cycles)

這導致:

[(-1, 0, 1), (-1, 0, 2), (-1, 1, 0), (-1, 1, 2), (-1, 2, 0), (-1, 2, 1), 
(0, -1, 1), (0, -1, 2), (0, 1, -1), (0, 1, 2), (0, 2, -1), (0, 2, 1), 
(1, -1, 0), (1, -1, 2), (1, 0, -1), (1, 0, 2), (1, 2, -1), (1, 2, 0), 
(2, -1, 0), (2, -1, 1), (2, 0, -1), (2, 0, 1), (2, 1, -1), (2, 1, 0), 
(-1, 0, 1, 2), (-1, 0, 2, 1), (-1, 1, 0, 2), (-1, 1, 2, 0), (-1, 2, 0, 1), (-1, 2, 1, 0), (0, -1, 1, 2), (0, -1, 2, 1), (0, 1, -1, 2), (0, 1, 2, -1), 
(0, 2, -1, 1), (0, 2, 1, -1), (1, -1, 0, 2), (1, -1, 2, 0), (1, 0, -1, 2), 
(1, 0, 2, -1), (1, 2, -1, 0), (1, 2, 0, -1), (2, -1, 0, 1), (2, -1, 1, 0), 
(2, 0, -1, 1), (2, 0, 1, -1), (2, 1, -1, 0), (2, 1, 0, -1)]

那么接下來我要做什么來過濾結果,以便我只有我想要的結果,它們是:

[(-1, 0, 1), (-1, 0, 2), (-1, 1, 0), (-1, 1, 2), (-1, 2, 0), (-1, 2, 1), 
(0, 1, 2), (0, 2, 1), (-1, 0, 1, 2), (-1, 0, 2, 1), (-1, 1, 0, 2), 
(-1, 1, 2, 0), (-1, 2, 0, 1), (-1, 2, 1, 0)]

如果它有助於列表之間的簡單區別是我想要的列表是所有以 -1 開頭的元組,以及沒有 -1 以 0 開頭的元組

    l=[(-1, 0, 1), (-1, 0, 2), (-1, 1, 0), (-1, 1, 2), (-1, 2, 0), (-1, 2, 1),                                                                                           
    (0, -1, 1), (0, -1, 2), (0, 1, -1), (0, 1, 2), (0, 2, -1), (0, 2, 1),
    (1, -1, 0), (1, -1, 2), (1, 0, -1), (1, 0, 2), (1, 2, -1), (1, 2, 0),
    (2, -1, 0), (2, -1, 1), (2, 0, -1), (2, 0, 1), (2, 1, -1), (2, 1, 0),
    (-1, 0, 1, 2), (-1, 0, 2, 1), (-1, 1, 0, 2), (-1, 1, 2, 0), (-1, 2, 0, 1), (-1, 2, 1, 0), (0, -1, 1, 2), (0, -1, 2, 1), (0, 1, -1, 2), (0, 1, 2, -1),
    (0, 2, -1, 1), (0, 2, 1, -1), (1, -1, 0, 2), (1, -1, 2, 0), (1, 0, -1, 2),
    (1, 0, 2, -1), (1, 2, -1, 0), (1, 2, 0, -1), (2, -1, 0, 1), (2, -1, 1, 0),
    (2, 0, -1, 1), (2, 0, 1, -1), (2, 1, -1, 0), (2, 1, 0, -1)]

   l2=[]

   for i in l:
       if i[0] == -1 :
           l2.append(i)

   print(l2)

此代碼有效

輸出

[(-1, 0, 1), (-1, 0, 2), (-1, 1, 0), (-1, 1, 2), (-1, 2, 0), (-1, 2, 1), (-1, 0, 1, 2), (-1, 0, 2, 1), (-1, 1, 0, 2), (-1, 1, 2, 0), (-1, 2, 0, 1), (-1, 2, 1, 0)]

從不包含要過濾的數字的列表開始:

例如,您只需要以 0 開頭的那些。那么您的列表是

l = [-1, 1, 2]

找到所有的兩個元素排列並根據需要過濾它們。 Ant 然后通過映射您的結果集添加 0 作為第一個元素。

例子:

In [2]: from itertools import permutations
In [3]: l = [-1, 1, 2]
In [4]: p = permutations(l, 2)
In [5]: [(0, *t) for t in p]
Out[5]: [(0, -1, 1), (0, -1, 2), (0, 1, -1), (0, 1, 2), (0, 2, -1), (0, 2, 1)]

你可以做一個類似的技巧,比如,那些沒有 -1 並從 0 開始的,從你的列表中省略 -1 和 0,然后將 0 作為第一個元素添加到你的結果集項目中。

並且不要覆蓋代碼中的保留關鍵字:

list =  [...] # do not do that

暫無
暫無

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

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