查找列表中重复元素的位置



基本上我想找到并打印所有重复元素的位置。下面是我的代码:

numbers = [7,1,3,6,4,2,5,9,8,10]
n = int(input("Enter a number from 1 to 10 to search for the number's position: "))
def findNum():
count = 0
while numbers[count] != n:
count += 1
numPos = count + 1
print(numPos)

if n in numbers:
print("Calculating position... (takes 9 years so wait)")
findNum()

else:
print("Number not found, next time enter a number from 1 to 10!")

例如,我在numbers中添加了一个额外的7:

numbers = [7,1,3,6,4,2,5,9,8,10,7]

然后我想返回第一个7的位置和另一个7的位置。怎么做呢?

要获取所有重复项,使用字典,其中键作为列表中的数字,值作为位置,使用enumerate:

from collections import defaultdict
numbers = [7, 1, 3, 6, 4, 2, 5, 9, 8, 10, 7]
duplicates = defaultdict(list)
# iterate over positions and numbers simultaneously
for i, number in enumerate(numbers):
# accumulate positions to the same number
duplicates[number].append(i)
result = {key: value for key, value in duplicates.items() if len(value) > 1}
print(result)

{7: [0, 10]}

从输出中可以看到,它返回7出现在位置0和10。这种方法的总复杂度是O(n)。

循环:

# iterate over positions and numbers simultaneously
for i, number in enumerate(numbers):
# accumulate positions to the same number
duplicates[number].append(i)

将不同位置(代码中的i)按相同的number分组。使用defaultdict.

表达式:

result = {key: value for key, value in duplicates.items() if len(value) > 1}

是一个字典推导式,在这里查看更多信息。

numbers = [7,1,7,6,4,2,5,9,8,10,7]
m=[]
for i in range(len(numbers)):
for j in range(i+1,len(numbers),1):
if(numbers[i]==numbers[j]):
m.append(i)
m.append(j)
l=list(set(m))
for i in range(len(l)):
print("First Occurence at position:{}".format(l[i]))

最新更新