我已經研究了很長一段時間,但似乎無法找到如何正確執行此操作。我有一個串列,它由 113287 個子串列的總和組成,每個子串列包含 2 個整數,每個整數為 2-3 位。
list = [[123, 456], [111, 111], [222, 222], [333, 333], [123, 456], [222, 222], [123, 456]]
現在我想計算存在不止一次的子串列的數量。不是整體重復的數量,索引也無關緊要,我只想知道哪個值組合存在不止一次。
該示例的結果應該是“2”,因為只有子串列“[222, 222]”和“[123, 456]”不止一次存在。
如果可能,并且只有在它不會使事情過于復雜的情況下,我才愿意在沒有外部庫的情況下進行。
我似乎無法弄清楚,任何幫助表示贊賞。
uj5u.com熱心網友回復:
用于collections.Counter對元素進行計數,然后回圈遍歷結果以僅保留計數大于 1 的元素,并且sum:
my_list = [[123, 456], [111, 111], [222, 222], [333, 333],
[123, 456], [222, 222], [123, 456]]
from collections import Counter
c = Counter(map(tuple, my_list))
number = sum(v>1 for v in c.values())
輸出: 2
注意。您需要將子串列轉換為元組,以便它們可以散列并計算Counter
uj5u.com熱心網友回復:
您可以遍歷set串列的 。但是因為串列是不可散列的,所以您需要將每個串列轉換lst為一個元組。然后簡單地計算每個串列lst出現的次數lst:
lst = [[123, 456], [111, 111], [222, 222], [333, 333], [123, 456], [222, 222], [123, 456]]
out = sum(1 for l in set(map(tuple,lst)) if lst.count(list(l))>1)
輸出:
2
此外,如果您想算作[[12,34],[34,12]]2,那么根據@mozway 的答案,您可以執行以下操作:
for i, l in enumerate(my_list):
if l[::-1] in my_list[:i]:
my_list[i] = l[::-1]
c = Counter(map(tuple, my_list))
number = sum(v>1 for v in c.values())
uj5u.com熱心網友回復:
您可以制作串列的非重復版本,然后計算重復元素的數量:
ls = [[123, 456], [111, 111], [222, 222], [333, 333], [123, 456], [222, 222], [123, 456]]
uni = []
c = 0
for l in ls:
if not l in uni:
uni.append(l)
for l in uni:
if ls.count(l) != 1:
c =1
print(c)
輸出: 2
uj5u.com熱心網友回復:
MY_LIST = [[123, 456], [111, 111], [222, 222], [333, 333], [123, 456], [222, 222], [123, 456]]
嘗試這個:
from:從串列串列中洗掉重復項
uniques = []
for elem in MY_LIST:
if elem not in uniques:
uniques.append(elem)
print(uniques,'\n')
進而:
repeated = {}
for elem in uniques:
counter = 0
for _elem in MY_LIST:
if elem == _elem:
counter=counter 1
if counter > 1:
repeated[str(elem)] = counter
print('amount of repeated sublists: {}'.format(len(repeated)))
print(repeated)
輸出:
[[123, 456], [111, 111], [222, 222], [333, 333]]
amount of repeated sublists: 2
{'[123, 456]': 3, '[222, 222]': 2}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375900.html
