python列表获取索引 - python找索引




如何在Python中使用for循环在数组中查找重复元素? (10)

我有一个重复元素的列表:

 list_a=[1,2,3,5,6,7,5,2]

 tmp=[]

 for i in list_a:
     if tmp.__contains__(i):
         print i
     else:
         tmp.append(i)

我使用上面的代码在list_a找到重复的元素。 我不想从列表中删除元素。

但我想在这里使用for循环。 通常C / C ++我们这样使用我猜:

 for (int i=0;i<=list_a.length;i++)
     for (int j=i+1;j<=list_a.length;j++)
         if (list_a[i]==list_a[j])
             print list_a[i]

我们如何在Python中使用这样的?

for i in list_a:
    for j in list_a[1:]:
    ....

我尝试了上面的代码。 但它解决了错误。 我不知道如何增加j的值。


仅使用itertools,并在Python 2.5上正常工作

from itertools import groupby
list_a = sorted([1, 2, 3, 5, 6, 7, 5, 2])
result = dict([(r, len(list(grp))) for r, grp in groupby(list_a)])

结果:

{1: 1, 2: 2, 3: 1, 5: 2, 6: 1, 7: 1}

仅供参考,在python 2.7+中,我们可以使用Counter

import collections

x=[1, 2, 3, 5, 6, 7, 5, 2]

>>> x
[1, 2, 3, 5, 6, 7, 5, 2]

>>> y=collections.Counter(x)
>>> y
Counter({2: 2, 5: 2, 1: 1, 3: 1, 6: 1, 7: 1})

唯一清单

>>> list(y)
[1, 2, 3, 5, 6, 7]

物品发现超过1次

>>> [i for i in y if y[i]>1]
[2, 5]

物品只找到一次

>>> [i for i in y if y[i]==1]
[1, 3, 6, 7]

你可以逐行“翻译”它。

C ++

for (int i=0;i<=list_a.length;i++)
    for (int j=i+1;j<=list_a.length;j++)
        if (list_a[i]==list_a[j])
            print list_a[i]

蟒蛇

for i in range(0, len(list_a)):
    for j in range(i + 1, len(list_a))
        if list_a[i] == list_a[j]:
            print list_a[i]

c ++ for循环:

for(int x = start; x < end; ++x)

Python等价物:

for x in range(start, end):

你总是可以使用列表理解:

dups = [x for x in list_a if list_a.count(x) > 1]

使用numpy:

import numpy as np
count,value = np.histogram(list_a,bins=np.hstack((np.unique(list_a),np.inf)))
print 'duplicate value(s) in list_a: ' + ', '.join([str(v) for v in value[count>1]])

只是快速和肮脏,

list_a=[1,2,3,5,6,7,5,2] 
holding_list=[]

for x in list_a:
    if x in holding_list:
        pass
    else:
        holding_list.append(x)

print holding_list

输出[1,2,3,5,6,7]


在Python3的情况下,如果你有两个列表

def removedup(List1,List2):
    List1_copy = List1[:]
        for i in List1_copy:
            if i in List2:
                List1.remove(i)

List1 = [4,5,6,7]
List2 = [6,7,8,9]
removedup(List1,List2)
print (List1)

多一点Pythonic实现(当然不是最多),但是在C代码的精神上可能是:

for i, elem in enumerate(seq):
    if elem in seq[i+1:]:
        print elem

编辑:是的,如果重复次数超过2次,它会多次打印元素,但这也是op的C伪代码所做的。


当然,我还没有做过测试,但我想在速度上很难击败熊猫:

 pd.DataFrame(list_a, columns=["x"]).groupby('x').size().to_dict()

看起来你有一个列表( list_a )可能包含重复项,你宁愿保持原样,并基于list_a构建一个去重复列表tmp 。 在Python 2.7中,您可以使用一行来完成此操作:

tmp = list(set(list_a))

此时比较tmplist_a的长度应该说明list_a中是否确实存在重复项。 如果您想进入循环以进行其他处理,这可能有助于简化操作。





duplicates