如何比较两个随机生成的列表以查找共同的元素

时间:2019-05-20 00:20:32

标签: python

我正在编写一个程序,该程序写出两个列表,每个列表包含0-9之间的五个数字。我需要程序比较列表以查找列表共有多少个数字,但是我不确定如何。

编辑:我只需要程序来写一些共同的数字,我不需要数字本身

if (BugType){
    if instance_exists(Obj_Food_Small){
        BugType = 1;
        move_towards_point(Obj_Food_Small.x, Obj_Food_Small.y, 3)
    } else {
        BugType = 0;
        move_towards_point(Obj_Ant_Home.x, Obj_Ant_Home.y, 3);
}

7 个答案:

答案 0 :(得分:2)

假设我们有两个随机生成的列表的l_onel_two

counter = [0] * 10
answer = 0
for x in l_one:
    counter[x] += 1
for x in l_two:
    if counter[x] > 0:
        counter[x] -= 1
        answer += 1
print(answer)

与之前发布的O(n ^ 2)个解决方案相比,该算法在O(n)中有效。

答案 1 :(得分:1)

与其他已发布但使用Counter的解决方案类似:

import random
from collections import Counter

for _ in range(2000):
    House_deal = [random.randint(0,9) for _ in range(5)]
    Player_deal = [random.randint(0,9) for _ in range(5)]

    hc = Counter(House_deal)
    pc = Counter(Player_deal)
    common = hc.keys() & pc.keys() #get the intersection of both keys
    counts = 0
    for cel in common:
        counts += min(hc[cel], pc[cel])

    print("House numbers: ", House_deal)
    print("Player numbers: ", Player_deal)
    print("Common numbers: ", counts)

我还将while循环更改为for循环。

答案 2 :(得分:0)

您可以定义一个类似here的函数,并使用len()函数获取列表中元素的数量。函数将列表转换为集合并获取它们的交集,这将是所有共同的元素。这样一来,如果您决定也要查看它们之间不常见的元素,或者甚至可以对其进行修改以从另一个列表中减去一个列表,以获得它们{{3 }}。让我知道这是否是您想要的。

答案 3 :(得分:0)

您可以使用以下功能:

def compare(list1 , list2):

    common_list = []

    for i in list1:
        if i in list2:
            common_list.append(i)

print(len(common_list))   # Number of common elements

答案 4 :(得分:0)

它的工作:

import random
list_one = random.sample(range(9), 4)
list_two = random.sample(range(9), 4)
print(list_one)
print(list_two)
count = 0
for item_one in list_one:
    for item_two in list_two:
        if item_one == item_two:
            count +=1

print(count)

附注:for item_two in list_two:的指令可能会被if item_one in list_two:更改,但是您似乎是一个初学者,所以我将其更明确地加以说明。

答案 5 :(得分:0)

上一个答案的变体。

counter_1 = {k, 0 : k in l_one}
counter_2 = {k, 0 : k in l_two}
answer = 0
for x in l_one:
    counter_1[x] = counter_1[x] + 1
for x in l_two:
    counter_2[x] = counter_2[x] + 1
for x, v1 in counter_1.items():
    v2 = counter_2.get(x, 0)
answer = answer + min (v1, v2)
print(answer)

答案 6 :(得分:-1)

您可以在Python中使用set数据类型,并执行类似的操作

In [1]: from random import randint

In [2]: import random

In [3]: random.seed(123)

In [4]: x = set([randint(0,9) for x in range(5)])

In [5]: y = set([randint(0,9) for x in range(5)])

In [6]: x
Out[6]: {0, 1, 4, 6}

In [7]: y
Out[7]: {0, 1, 6, 8}

In [8]: cnt = len(x & y)    # return the amount of numbers in common, e.g. {0, 1, 6}

In [9]: cnt
Out[9]: 3

希望有帮助。