【问题标题】:list of list comparison with respect to a integer value in tuple关于元组中整数值的列表比较列表
【发布时间】:2019-12-14 01:08:41
【问题描述】:

我正在尝试创建一个函数,它需要 2 个列表列表和一个整数作为输入:

list1 = [[2, 47, -42], [-42, 29, -45], [24, -11, 18], [-34, -4, -14], [-42, -45, 49], [-21, -6, 12]]
list2 = [[13, 15, -11], [35, -5, -42], [-42, 29, -45], [-48, 8, 26], [-42, 29, -45]]
integer = -42

首先,使用 -42 作为变量检查 list1 中的元组,然后使用 -42 检查 list2 中相同元组的计数。 对于上面的例子,输出应该是:2 as

In list1(tuple with -42): [[2, 47, -42],[-42, 29, -45],[-42, -45, 49]]
list2(similar tuples):[[-42, 29, -45],[-42, 29, -45]]
count: 2

我到现在为止的尝试:

res = sum(x == y for x, y in zip(list1,list2)) 

上面的代码没有给出任何结果。

【问题讨论】:

    标签: python python-3.x list lambda tuples


    【解决方案1】:
    def abs_double_list(l):
        return [[abs(y) for y in x] for x in l]
    
    res = sum( x in abs_double_list(list1) and abs(integer) in x for x in abs_double_list(list2))
    

    这解决了你的问题。问题是您不会将列表中的每个元素相互比较,因为 zip 在列表中生成一对元素,因此您只能将这对相互比较(索引 0、1、2、3 上的元素等等,但是从不使用其他索引)

    @Edit 独立于负值

    【讨论】:

    • 有什么方法可以处理负值,比如让list1和list2中的所有变量都为正值?
    • @User 仅用于比较还是要创建新列表?
    • 仅在进行此转换时
    【解决方案2】:

    您的第一个条件是守卫,然后使用第二个条件执行sum(),例如:

    In []:
    sum(sum(x == y for y in list2) for x in list1 if integer in x)
    
    Out[]:
    2
    

    但如果这些真的是使用collections.Counter() 的元组,您可以采用不同的方式(更有效):

    In []:
    c = Counter(tuple(y) for y in list2)
    sum(c[tuple(x)] for x in list1 if integer in x)
    
    Out[]:
    2
    

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2021-06-24
      • 1970-01-01
      相关资源
      最近更新 更多