如何检查列表中的两个数字是否为sam

2024-06-09 05:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我很好奇如何检查列表中的两个数字是否相同。例如

myList=[1,7,9,3,1,2,8]

在本例中,“1”在“myList”中重复出现。

我如何制作一个程序,检查列表中的两个数字是否相同(重复)。尝试使用循环以便我能理解,因为我还没有学会复杂的函数。


Tags: 函数程序列表数字学会本例mylist
4条回答

使用^{}

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,您知道源列表中的每个元素重复了多少次。

之后,您可以使用一个简单的^{}来知道哪些元素是重复的:

result = [i for i, j in counter.items() if j > 1]
print(result) # prints '[1]'

如果你想使用循环,你必须使用一个列表或一组你已经看到的数字。然后在循环过程中,使用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

我想说,最恶毒的方法是使用collections.Counter,但其他答案已经涵盖了这一点。要使用内置的,可以使用generator expressionset生成一组出现多次的数字。

In [39]: seen = set()

In [40]: print list(set(x for x in myList if x in seen or seen.add(x)))
[1]

在这里,表达式将循环myList中的所有值,并将它们添加到名为seenset中(如果已经看到)。最后,它会将结果集转换为列表并打印内容。

可以使用内置的set()函数将列表转换为集合,集合不能有重复项。因此,如果集合和列表的大小不同,则列表具有重复项。

if len(myList) != len(set(myList)):
    print "duplicates"

这假设您不关心副本是什么,您只想知道是否存在一个或多个副本。

如果你想使用循环,你必须使用一个列表或一组你已经看到的数字。然后在循环过程中,使用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

我想说,最恶毒的方法是使用collections.Counter,但其他答案已经涵盖了这一点。要使用内置的,可以使用generator expressionset生成一组出现多次的数字。

In [39]: seen = set()

In [40]: print list(set(x for x in myList if x in seen or seen.add(x)))
[1]

在这里,表达式将循环myList中的所有值,并将它们添加到名为seenset中(如果已经看到它们的话)。最后,它会将结果集转换为列表并打印内容。

相关问题 更多 >