Python列表:如何在列表中搜索另一个元素或重复项

Python列表:如何在列表中搜索另一个元素或重复项,python,Python,我有一个列表,上面写着p=[1,2,3,4,2] 如果bool值包含一个重复项,那么是否有任何方法可以返回bool值True,只使用find、index、slicing、len()等方法,而不使用dict、tuple等方法 我使用了以下代码: for e in p: duplicate = p.find(e, e+1) if duplicate in p: return True 如果必须这样做,您可以: def has_duplicates(lst):

我有一个列表,上面写着
p=[1,2,3,4,2]
如果bool值包含一个重复项,那么是否有任何方法可以返回bool值
True
,只使用find、index、slicing、len()等方法,而不使用dict、tuple等方法

我使用了以下代码:

for e in p: 
   duplicate = p.find(e, e+1) 
   if duplicate in p: 
       return True

如果必须这样做,您可以:

def has_duplicates(lst):
    for i, e in enumerate(lst[::-1]):
        if lst.index(e) != len(lst) - i - 1:
            return True
    return False
这将以相反的顺序遍历列表(因为
索引
从列表开始搜索)。但最好是简单地做:

def has_duplicates(lst):
    return len(set(lst)) != len(lst)

如果必须这样做,您可以:

def has_duplicates(lst):
    for i, e in enumerate(lst[::-1]):
        if lst.index(e) != len(lst) - i - 1:
            return True
    return False
这将以相反的顺序遍历列表(因为
索引
从列表开始搜索)。但最好是简单地做:

def has_duplicates(lst):
    return len(set(lst)) != len(lst)
您还可以使用:

您还可以使用:

你可以在网上找到

您可以在中找到。

以下是简单的方法:

return len(p) != len(set(p))
不使用
设置
的效率较低的方法:

for i in range(len(p)):
   if p[i] in p[i+1:]:
      return True
return False
第二种方法不是很地道,但除了最基本的语言特性(包括元组)外,它避免了其他所有特性

还有一种方法:

while p:
   e = p.pop()
   if e in p:
      return True
return False
这很简单,但会修改列表

最后一个我要演示的方法是:

s = sorted(p)
for i in range(1, len(s)):
   if s[i] == s[i - 1]:
      return True
return False
这是通过排序
p
然后比较每对连续元素来实现的。

以下是简单的方法:

return len(p) != len(set(p))
不使用
设置
的效率较低的方法:

for i in range(len(p)):
   if p[i] in p[i+1:]:
      return True
return False
第二种方法不是很地道,但除了最基本的语言特性(包括元组)外,它避免了其他所有特性

还有一种方法:

while p:
   e = p.pop()
   if e in p:
      return True
return False
这很简单,但会修改列表

最后一个我要演示的方法是:

s = sorted(p)
for i in range(1, len(s)):
   if s[i] == s[i - 1]:
      return True
return False

这是通过排序
p
然后比较每对连续元素来实现的。

这里有一个非常简单的方法。对于非常大的列表,它可能会很慢

def has_duplicates(lst):
    for e in lst:
        lst = lst[1:]
        if e in lst: return True
    return False

这里有一个非常简单的方法。对于非常大的列表,它可能会很慢

def has_duplicates(lst):
    for e in lst:
        lst = lst[1:]
        if e in lst: return True
    return False

使用集合。计数器

>>> import collections
>>> p
[1, 2, 3, 4, 2]
>>> if collections.Counter(p).most_common()[0][1] > 1: 
...     print('duplicate found')
... 
duplicate found
>>> if collections.Counter(set(p)).most_common()[0][1] > 1: 
...     print('duplicate found')
... 
>>> 

使用集合。计数器

>>> import collections
>>> p
[1, 2, 3, 4, 2]
>>> if collections.Counter(p).most_common()[0][1] > 1: 
...     print('duplicate found')
... 
duplicate found
>>> if collections.Counter(set(p)).most_common()[0][1] > 1: 
...     print('duplicate found')
... 
>>> 

为什么要求不使用
dict
等(我假设这包括
set
)?您能格式化您的问题吗?@E先生,我不知道怎么格式化here@yesboy-这次我已经为你准备好了。单击“编辑”并查看它是如何完成的。@yesboy:这可能就是机会!:)为什么要求不使用
dict
等(我假设这包括
set
)?您能格式化您的问题吗?@E先生,我不知道怎么格式化here@yesboy-这次我已经为你准备好了。单击“编辑”并查看它是如何完成的。@yesboy:这可能就是机会!:)谢谢!这就是我正在搜索的内容。我想知道使用
排序
并将每一项与前一项进行比较是否符合要求。@StevenRumbalski:我不知道,但我还是把它包括在内了。谢谢你的建议。非常感谢!这就是我正在搜索的内容。我想知道使用
排序
并将每一项与前一项进行比较是否符合要求。@StevenRumbalski:我不知道,但我还是把它包括在内了。谢谢你的建议。