【问题标题】:Minimizing the code using the enumerate function in Python在 Python 中使用 enumerate 函数最小化代码
【发布时间】:2021-04-03 06:28:52
【问题描述】:

在下面我有一个函数可以检查和输出list_1, list_2, list_3 中的任何公共数字,有没有一种方法可以使用enumerate 或任何其他可以最小化代码中间部分的函数函数。

需要最小化的位:

for elem in l1:#loop to access l1elements
    if elem in l2:#checking for element in l2
        if elem in l3:#checking for element in l3

完整代码:

def intersect(l1, l2, l3) :#function
    for elem in l1:#loop to access l1elements
        if elem in l2:#checking for element in l2
            if elem in l3:#checking for element in l3
print (element) #display element

list_1 =[27, 20, 22, 21, 17, 12, 24, 23, 19, 14, 11, 26, 25, 13, 15, 21, 18, 28, 29, 10]
list_2 = [14, 25, 26, 21, 22, 17, 11, 23, 27, 18, 24, 28, 12, 29, 16, 19, 13, 10, 20, 15]
list_3 = [19, 21, 11, 24, 16, 17, 18, 22, 26, 10, 23, 29, 27, 13, 25, 14, 15, 20, 28, 12]

intersect(list_1, list_2, list_3) #calling function

【问题讨论】:

  • 帖子是否回答了您的问题?

标签: python-3.x list function for-loop enumerate


【解决方案1】:

@tony selcuk - 您似乎尝试循环 3 个列表来查找相应的匹配数字?在这种情况下,您可以尝试此代码 sn-p 以查看它是否按您的意愿工作。它使用 enumerate() 将所有 3 个列表循环在一起,并将它们的 (index, num) 作为元组来比较是否有匹配项。运行它。一旦证明可以按预期工作,您就可以轻松地将其转换为函数。这种方法将找到所有三个列表中出现的所有匹配数字,并且在相同的位置(索引)。

for i, j, k in zip(enumerate(list_1), enumerate(list_2), enumerate(list_3)):
    #print(i, j, k)
    
    if i == j == k:
        print("number:{} order:{}".format(i[1], j[0]))
        

【讨论】:

    【解决方案2】:

    您应该改用set object

    set_1 = set([27, 20, 22, 21, 17, 12, 24, 23, 19, 14, 11, 26, 25, 13, 15, 21, 18, 28, 29, 10])
    set_2 = set([14, 25, 26, 21, 22, 17, 11, 23, 27, 18, 24, 28, 12, 29, 16, 19, 13, 10, 20, 15])
    set_3 = set([19, 21, 11, 24, 16, 17, 18, 22, 26, 10, 23, 29, 27, 13, 25, 14, 15, 20, 28, 12])
    
    set_1.intersection(set_2, set_3)
    

    【讨论】:

    • 语法有错误。请仔细检查并更正。
    • 糟糕,我误会了。这是类方法。
    【解决方案3】:

    您可以使用 numpy intersect1d 方法查找列表或数组中的公共值

    def intersect(l1, l2, l3):
        print(reduce(np.intersect1d, (l1, l2, l3)))
    

    结果:


    [10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29]
    

    代码:


    import numpy as np
    from functools import reduce
    
    
    def intersect(l1, l2, l3):
        print(reduce(np.intersect1d, (l1, l2, l3)))
    
    
    list_1 = [27, 20, 22, 21, 17, 12, 24, 23, 19, 14, 11, 26, 25, 13, 15, 21, 18, 28, 29, 10]
    list_2 = [14, 25, 26, 21, 22, 17, 11, 23, 27, 18, 24, 28, 12, 29, 16, 19, 13, 10, 20, 15]
    list_3 = [19, 21, 11, 24, 16, 17, 18, 22, 26, 10, 23, 29, 27, 13, 25, 14, 15, 20, 28, 12]
    
    intersect(list_1, list_2, list_3) #calling functio
    

    【讨论】:

      猜你喜欢
      • 2019-09-08
      • 2017-07-28
      • 2014-12-04
      • 2014-01-15
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      相关资源
      最近更新 更多