检查数组中的两个值是否相同。蟒蛇

时间:2018-01-03 15:35:17

标签: python arrays

这是我的代码

a = [1, "A", 2, "B", 1, "C"]
empty = []
if a[0] == a[2]:
    empty.append(a[1])
    empty.append(a[3])
elif a[0] == a[4]:
    empty.append(a[1])
    empty.append(a[5])
elif a[2] == a[4]:
    empty.append(a[3])
    empty.append(a[5])

我正在寻找一种更有效的方法来执行此过程。如果两个元素[整数]在该数组中是相同的,我希望它将数组[index + 1]追加到"空"。如果数组中有2个相同的值,它将有2个字母。 在这个例子中,它们将是[" A"," C"],因为它们都有1。我更愿意找到重复项目所在的索引位置。

3 个答案:

答案 0 :(得分:1)

如果您只想找到一个匹配

a = [1, "A", 2, "B", 1, "C"]
empty = []
match = False

for i in range(0, len(a), 2):
    for j in range(i + 2, len(a) - 1, 2):
        if a[i] == a[j]:
            empty.append(a[i])
            empty.append(a[j])
            match = True
            break
    if match:
        break

如果你想要所有的比赛

a = [1, "A", 2, "B", 1, "C"]
empty = []

for i in range(0, len(a), 2):
    for j in range(i + 2, len(a) - 1, 2):
        if a[i] == a[j]:
            empty.append(a[i])
            empty.append(a[j])

如果您想要索引而不是项目更改

empty.append(a[i])
empty.append(a[j])

empty.append(i)
empty.append(j)

修改

正如@Aaron指出的那样,带有匹配变量的代码可以使用else循环的for子句编写。

a = [1, "A", 2, "B", 1, "C"]
empty = []

for i in range(0, len(a), 2):
    for j in range(i + 2, len(a) - 1, 2):
        if a[i] == a[j]:
            empty.append(a[i])
            empty.append(a[j])
            break
    else:
        continue
    break

答案 1 :(得分:0)

您可以使用itertools.combinations从列表中获取两个项目的每个唯一组合(在这种情况下是偶数索引的列表)。这些项目将按照输入的字典顺序生成,因此如果输入已排序,则输出也将如此。

from itertools import combinations
a = []
empty = [1, "A", 2, "B", 1, "C"]
for x,y in combinations(range(0,len(a),2),2): #take combinations in sets of 2 from the even indices
    if a[x] == a[y]:
        empty += (a[x+1], a[y+1]) #this could fail if you have an odd number of items in the list a

如果您想在匹配一对后停止,只需在“if”语句中将项目追加到break后添加empty

答案 2 :(得分:0)

试试这个检查重复

>>> def checkDuplicate(List):
    duplicate={}
    for i in List:
        duplicate[i]=duplicate.get(i,0)+1
    return [k for k,v in duplicate.items() if v>1]

>>> checkDuplicate([1,2,3,"s",1,2,3])
[1, 2, 3]