【问题标题】:Find position of duplicate elements in list查找列表中重复元素的位置
【发布时间】:2021-12-04 21:36:54
【问题描述】:

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

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 的位置。怎么做?

【问题讨论】:

  • index=[idx for idx,val in enumerate(some_list) if val==n]
  • @Ch3steR 我不认为重复是合适的
  • @DaniMesejo OP 将n 作为输入,想要打印所有出现的n 的索引。除了找到min 值的索引之外,我链接的骗子做同样的事情?或者也许我理解了这个问题?
  • @Ch3steR 我理解您的推理,并确定这两个问题都是关于查找索引的,但正如您所说,一个找到索引 o 最小值,因此只有一组索引(最小值?)可用,当面对重复时可以多组索引,每个重复。
  • @DaniMesejo 但是从 OP 的代码来看,我认为很明显他只想要 n 的索引。 IIUC,你说的是 OP 想要的 L = [7, 7, 8, 8] -> {7:[0, 1], 8:[2, 3]}?我认为 OP 想要 [0, 1] 如果 n 是 7,如果 n 是 8 [2, 3]。我认为你的回答和往常一样好,在这里有点过分了。也+1。我可能错了英语不是我的母语。我很高兴重新提出问题。

标签: python list indexing duplicates


【解决方案1】:

要获取所有重复项,请使用字典,其中键作为列表中的数字,值作为位置,要获取位置,请使用 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)

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

表达式:

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

是一个字典理解,查看更多信息here

【讨论】:

  • 谢谢它的工作,但你能告诉我枚举是如何工作的吗??
  • @DogeCoder 用枚举链接更新了答案
  • 你能告诉我“result = {}”行是如何工作的吗?这些我都不懂
  • @DogeCoder 更新了答案
【解决方案2】:
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]))

【讨论】:

  • 感谢您的帮助赶集!下次请考虑为您的答案添加一些解释,不仅仅是代码
猜你喜欢
  • 1970-01-01
  • 2018-02-24
  • 2014-04-21
  • 1970-01-01
  • 2010-10-10
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多