我很好奇如何檢查列表中的2個數字是否相同。例如,如何檢查列表中的兩個數字是否相同
myList=[1,7,9,3,1,2,8]
在這種情況下, 「1」 被重複 'myList中'。
我怎麼會讓一個程序,檢查,看看是否列表內的兩個數字是相同的(重複)。嘗試使用循環,所以我可以理解,因爲我還沒有學會複雜的功能。
我很好奇如何檢查列表中的2個數字是否相同。例如,如何檢查列表中的兩個數字是否相同
myList=[1,7,9,3,1,2,8]
在這種情況下, 「1」 被重複 'myList中'。
我怎麼會讓一個程序,檢查,看看是否列表內的兩個數字是相同的(重複)。嘗試使用循環,所以我可以理解,因爲我還沒有學會複雜的功能。
如果你想使用循環,你必須使用你已經看到的一個列表或一組數字。然後在循環時,您將檢查,如果號碼已被查看,則使用in
運算符。
seen = []
for number in myList:
if number in seen:
print "Number repeated!"
else:
seen.append(number)
set
不允許在它的重複,因此這是一個非常適合這種算法的。正如評論中提到的那樣,檢查一個元素是否在一個集合中的時間複雜度對於平均情況(O(1))是不變的,所以如果你有很多數字,這個效率會更高。
seen = set()
for number in myList:
if number in seen:
print "Number repeated!"
seen.add(number) # won't duplicate
我會說,最Python的方式是使用collections.Counter
,但其他的答案涵蓋這已經。要使用內置的,您可以使用generator expression和set
來生成一組出現多次的數字。
In [39]: seen = set()
In [40]: print list(set(x for x in myList if x in seen or seen.add(x)))
[1]
這裏表達將循環遍歷所有myList
值,並將其添加到一個名爲seen
set
如果他們已經看到。最終,它會將結果集轉換爲列表並打印內容。
你可以改變列表爲一組
myset = set(mylist)
,並檢查長度是不同的。如果是這樣,那麼重複。
這是因爲一組conains每個元素只有一次,如果多個元素都是平等的 - 就像套在數學意義。
這是最簡單的方法,如果你不需要知道其中號碼是重複的。
+1非常有趣,但你可能想解釋它是如何工作的(轉換設置唯一化),因爲用戶似乎是Python的新手。 – 2013-04-22 20:23:21
您可以使用內置的set()
功能,集不能有重複的列表轉換爲一個集。因此,如果「設置」和「列表」的大小不同,則「列表」會有重複。
if len(myList) != len(set(myList)):
print "duplicates"
這假定你不關心重複是什麼,你只想知道是否存在一個或多個重複。
from collections import Counter
myList = [1, 7, 9, 3, 1, 2, 8]
counter = Counter(myList)
print(counter) # prints 'Counter({1: 2, 2: 1, 3: 1, 7: 1, 8: 1, 9: 1})'
隨着Collections.Counter
,你知道多少次重複源列表myList
的每一個元素。
之後,你可以用一個簡單的list comprehension
知道哪些是重複的元素:
result = [i for i, j in counter.items() if j > 1]
print(result) # prints '[1]'
OP想要for-loops。 – 2013-04-22 20:23:09
@ Ashwini Chaudhary:他說過「試圖使用循環,因爲我沒有學習複雜的功能」。我不認爲使用'collections.Counter'是複雜的:) – 2013-04-22 20:25:14
+1大量使用超鏈接學習高級Python概念。 – 2013-04-22 20:37:32
myList=[1,7,9,3,1,2,8]
counts = {elem:myList.count(elem) for elem in set(myList)}
for i in counts:
if counts[i] > 1:
print '{} occurs more than once'.format(i)
如果你不想使用字典理解:
myList=[1,7,9,3,1,2,8]
counts = {}
for elem in set(myList):
counts[elem] = myList.count(elem)
if counts[elem] > 1:
print '{} occurs more than once'.format(i)
也許不是最容易理解,但這是我如何做到的。
seen = set()
duplicated = [t for t in my_list if t in seen or seen.add(t)]
它等同於(而且更容易理解)
duplicated = []
seen = set()
for elem in my_list:
if elem in seen:
duplicated.append(elem)
else:
seen.add(elem)
-1完全缺乏研究工作,並且不包括你試過什麼。 – Adam 2013-04-22 20:27:21