【问题标题】:Index values of repeating elements of a list列表中重复元素的索引值
【发布时间】:2015-07-31 11:20:32
【问题描述】:

我在另一篇帖子Index of duplicates items in a python list 中看到了这个解决方案,其中清楚地表明使用下面的代码,您可以获得列表中重复元素的索引位置。

[[], [], [], [], [], [], 2, 3, 4, 5, 3, 4, 5, 4, 5, 5, 1, 6, 7, 7, 6、1、7、6、1、1、5、4、3、2、2、0]

def duplicates(lst, item):
       return [j for j, x in enumerate(lst) if x == item]
print(duplicates(XORcomb, 2)))

输出

[6, 29, 30]

但是,如果我尝试迭代该过程,它不起作用。

N = [1, 2, 3, 4, 5]    

def duplicates(lst, item):
     return [i for i, x in enumerate(lst) if x == item]

for each in N:
     print("%r occurs at: %r " %(each, duplicates(XORcomb, each)))

输出

'1' 出现在:[]

'2' 出现在:[]

'3' 出现在:[]

'4' 出现在:[]

'5' 出现在:[]

如果列表 N 是预定义的,它可以正常工作。但是如果列表 N 是用户定义的,那么它就不起作用了。

n = int(input("Enter number of values: ")) #Get user input for no. of values
N = []
for e in range (1, n+1):
     elements = input("Enter element %r: " %e)
     N.append(elements)
XORcomb = [[], [], [], [], [], [], 2, 3, 4, 5, 3, 4, 5, 4, 5, 5, 1, 6, 7, 7, 6, 1, 7, 6, 1, 1, 5, 4, 3, 2, 2, 0]
def duplicates(lst, item):
     return [j for j, x in enumerate(lst) if x == item]
for each in N:
     print("%r occurs at: %r " %(each, duplicates(XORcomb, each)))

【问题讨论】:

  • 您正在为每个单独的元素调用该函数。它只是打印元素,然后是一个空列表,因为不可能只有一个元素重复。
  • 尝试打印XORcomb 也许它不再有12 左右。
  • 如果我在XORComb 中使用上面的列表,我会得到完全不同的结果,你能检查一下XORComb 是不是你认为的那样?
  • XORcomb = [[], [], [], [], [], [], 2, 3, 4, 5, 3, 4, 5, 4, 5, 5, 1 , 6, 7, 7, 6, 1, 7, 6, 1, 1, 5, 4, 3, 2, 2, 0]
  • XORcomb 没有改变

标签: python list indexing repeat


【解决方案1】:

问题是 input() 返回一个字符串而不是一个数字。当您运行 duplicates() 函数时比较整数和字符串并得到一个空结果,因为您的 XORcomb 列表中没有字符串。

您需要先使用int() 转换它,然后再将其添加到N,就像您对n 所做的那样:

>>> XORcomb = [None, None, None, None, None, None, 2, 3, 4, 5,
                  3, 4, 5, 4, 5, 5, 1, 6, 7, 7, 6, 1, 7, 6, 1, 1,
                  5, 4, 3, 2, 2, 0]
>>> N = []
>>> n = int(input("Enter number of values: "))

>>> for e in range(0, n):
       element = input("Enter element {}: ".format(str(e + 1)))
       N.append(int(element))


>>> for each in N:
     print("%r occurs at: %r " %(each, duplicates(XORcomb, each)))


1 occurs at: [16, 21, 24, 25] 
2 occurs at: [6, 29, 30] 
3 occurs at: [7, 10, 28] 
4 occurs at: [8, 11, 13, 27] 
5 occurs at: [9, 12, 14, 15, 26] 

【讨论】:

  • 是的,我已经尝试过了,它可以工作。但是,问题是 XORcomb 随列表 N 而变化。所以,我需要使用列表 N 的元素(来自用户的输入)
  • 不,它没有。它给出了上面我的问题中所述的输出。
  • 当我运行你的代码时它的工作(for each in N:...)
  • 它识别列表的每个元素,没有找到索引值
  • 你能粘贴你的输出吗?
猜你喜欢
  • 2018-07-06
  • 2019-05-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多