【问题标题】:How do I print only non repeated elements in a list in Python? [duplicate]如何在 Python 中仅打印列表中不重复的元素? [复制]
【发布时间】:2021-02-20 12:44:36
【问题描述】:

我有一个数组arr = [4, 8, 2, 8, 9]

我想打印不重复的元素。

即4、2、9

但我的代码给出的列表索引超出范围,即使相同的逻辑在 Java 中有效但在我的 Python 代码中无效。这是我的代码:

def odd_occurring_num(arr):
    count = 0
    size = len(arr)
    
    for i in arr:
        for j in arr:
            if (arr[i] == arr[j] and i != j):
                break
        if (j == size):
            count += 1
    return count
    
# driver Code
arr = [4, 8, 2, 8, 9]
print(odd_occurring_num(arr))

【问题讨论】:

  • 这里 i 和 j 不是索引而是数组的元素
  • 你遍历列表的元素(即i将依次获取列表中每个元素的)-但是您使用就像您将 indexes 迭代到您的列表中一样。请参阅欺骗以解决您想要做的事情。至于为什么它适用于 Java 而不是 Python:Python ain't no Java.

标签: python arrays python-3.x list


【解决方案1】:

你甚至不需要导入模块,Python 都内置了

arr = [4, 8, 2, 8, 9]
def odd_occurring_num(arr):
    return [i for i in arr if arr.count(i) < 2]

print(odd_occurring_num(arr))

你做了什么:

for i in arr:
    arr[i] = ...

实际上将遍历数组的项目,因此您将获得arr[4],即9,然后arr[8] 未定义,因为您列出的只有5 个元素。 你可以做的是:

for i, elem in enumerate(arr):
   arr[i] = ...

它将遍历索引i 和元素本身

【讨论】:

  • 我理解并且有效。谢谢,我是 python 新手,但这太棒了,只是几行代码完成了与我在 java 中编写的许多行相同的事情。你能告诉这是什么[i for i in arr if arr.count(i)
  • 非常感谢。我很感激
【解决方案2】:

试试这个:

from collections import Counter                                                                                                                                                                                                                                                   

c = Counter([4, 8, 2, 8, 9])    
[i for i,j in c.items() if j==1]

这将返回:

[4, 2, 9]

如果你看一下c,你可以看到:

Counter({4: 1, 8: 2, 2: 1, 9: 1})

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多