检查列表中的所有元素是否唯一。

28 浏览
0 Comments

检查列表中的所有元素是否唯一。

如何以最常见的方式检查列表中的所有元素是否唯一?\n我目前使用的方法是使用Counter:\n

>>> x = [1, 1, 1, 2, 3, 4, 5, 6, 2]
>>> counter = Counter(x)
>>> for values in counter.itervalues():
        if values > 1: 
            # 做某事

\n我能做得更好吗?

0
0 Comments

检查列表中所有元素是否唯一的问题是因为需要确定列表中是否有重复的元素。方法一是使用集合来存储已经遍历过的元素,如果遍历到的元素已经在集合中存在,则返回False,否则将元素添加到集合中。方法二是判断列表的长度是否等于去重后的集合的长度,如果相等则返回True,否则返回False。

在小规模的情况下或者早期退出不是常见情况时,方法二len(x) != len(set(x))应该是最快的方法。作者选择接受了其他答案,因为他并不特别追求优化。

可以通过在s = set()之后加上以下一行代码来缩短方法一:return not any(s.add(x) if x not in s else True for x in g)

如果早期退出不常见,为什么你会认为len(x) != len(set(x))比方法一更快呢?这两种操作都是O(len(x))的时间复杂度(其中x是原始列表)。

原因在于方法二的时间复杂度不是O(len(x)),因为它在O(len(x))的循环内部进行了if x in s的判断。

0
0 Comments

检查列表中的所有元素是否唯一的问题是因为需要判断给定列表中的元素是否存在重复的情况。为了解决这个问题,可以使用上述的两个函数。第一个函数使用了一个集合(set)来存储已经出现过的元素,如果遍历列表的过程中发现某个元素已经在集合中出现过,则返回False,否则返回True。第二个函数在元素不可哈希(unhashable)的情况下使用了一个列表(list)来存储已经出现过的元素,其他逻辑和第一个函数相同。

这两个函数的优点是简洁且不需要遍历整个列表。如果在遍历过程中已经发现了重复元素,则会立即返回False,提前结束遍历。

对于第一个函数,可以通过调用allUnique("ABCDEF")来检查字符串"ABCDEF"中的元素是否唯一,结果为True。而allUnique("ABACDEF")的结果为False,因为字符串中的元素"A"重复出现了。

对于第二个函数,可以通过调用allUnique([list("ABC"), list("DEF")])来检查列表[["A", "B", "C"], ["D", "E", "F"]]中的元素是否唯一,结果为True。而allUnique([list("ABC"), list("DEF"), list("ABC")])的结果为False,因为列表中的子列表["A", "B", "C"]重复出现了。

最后,还有一个评论提到了代码片段的许可问题。原作者表示愿意将代码片段授权给使用Apache 2.0兼容许可证的项目使用,例如Apache 2、2/3-line BSD、MIT、X11或zlib许可证。

0
0 Comments

问题的出现原因:在这段内容中,有用户提出了一个问题,即如何判断一个列表中的所有元素是否唯一。然后其他用户给出了一些解决方法,并讨论了这些方法的效率和适用场景。

解决方法:根据讨论,以下是判断一个列表中所有元素是否唯一的解决方法:

1. 方法一:if len(x) > len(set(x)): 这种方法简单直观,但对于较长的列表可能不是最高效的。

2. 方法二:使用提前退出的解决方法。当列表中出现重复元素时,提前退出,可以减少执行时间。但对于大多数列表都是唯一的情况,这种方法比较耗时。

根据使用场景的不同,可以选择适合的解决方法。

以上是讨论的主要内容,用户还指出了问题标题与解决方法中的判断条件相反的情况,并提醒注意这一点。

0