簡體   English   中英

整數列表中的對元組

[英]Tuple of Pairs from List of Integers

我正在嘗試從整數列表創建元組對列表。 元組對列表將包含在列表中找到的數字對。 下面的例子:

listofint = [4, 3, 1, 2, 3, 1, 1, 3, 5, 1, 2, 2]
listoftuplepairs = [(3,3),(1,1),(2,2),(1,1)]

我很困惑如何使用列表理解來實現這一點。 我在下面試過這個,但它只返回一個空字符串。

listoftuplepairs = [(i,listofint.remove(i)) for i in listofint if listofint.remove(i) == i]

我知道在列表上使用remove()不會返回任何內容。 我已經嘗試過pop()但我只能將列表索引作為參數傳遞給它,而不是我想要pop()並存儲在我的元組列表中的實際值。

有沒有其他方法可以通過列表理解來做到這一點?

您可以使用Counter嘗試此操作

Counter用於計算可散列對象的出現次數。

from collections import Counter
l=[4, 3, 1, 2, 3, 1, 1, 3, 5, 1, 2, 2]
c=Counter(l)
# Counter({4: 1, 3: 3, 1: 4, 2: 3, 5: 1})

[(k,k) for k,v in c.items() for _ in range(v//2)]
# [(3, 3), (1, 1), (1, 1), (2, 2)]

因此,這里的鍵k是數字,值v是它在列表中出現的次數。 由於您希望對獲得對的數量,因此我做了v//2 單行列表理解中的上述方法是

[(k,k) for k,v in Counter(l).items() for _ in range(v//2)]

使用dict.fromkeys 只是模仿Counter在這里所做的。

c=dict.fromkeys(l,0)
for k in l:
    c[k]+=1

[(k,k) for k,v in c.items() for _ in range(v//2)]

暫無
暫無

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

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