代码之家  ›  专栏  ›  技术社区  ›  Rlyeh

如何在python中对N个列表的元素求和?

  •  0
  • Rlyeh  · 技术社区  · 2 年前

    lst = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])]
    

    我想得到每个元组中每个列表的索引[1]之和(第一个元组=3,第二个元组=12) 结果如下所示:

    ['ab', 3]
    ['cde', 12]
    

    我试过这个:

    for tuples in lst:
        total = [x + y for (x, y) in zip(*tuples)]
        print(total)
    

    所以我试着这样做:

    for tuples in lst:
        sum = [sum(x) for x in zip(*tuples)]
    

    有什么想法吗?

    6 回复  |  直到 2 年前
        1
  •  1
  •   Julien    2 年前

    简单地说:

    L = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])]
    
    for t in L:
        s = ''.join(x[0] for x in t)
        S = sum(x[1] for x in t)
        print([s, S])
    

    并避免使用python关键字定义变量名。。。

        2
  •  1
  •   mozway    2 年前

    这里有一个想法,使用嵌套列表理解 zip 和一个用于求和或求和的自定义函数:

    lst = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])]
    
    def sum_or_join(l):
        try:
            return sum(l)
        except TypeError:
            return ''.join(l)
        
    out = [[sum_or_join(x) for x in zip(*t)] for t in lst]
    

    或者如果在内部元组中总是有两个项 ('string', int)

    out = [[f(x) for f, x in zip((''.join, sum), zip(*t))]
           for t in lst]
    

    输出: [['ab', 3], ['cde', 12]]

        3
  •  1
  •   Fahim Ferdous    2 年前

    我希望这有帮助

    lst = [ (['a', 1], 
             ['b', 2]), 
             
            (['c', 3], 
             ['d', 4], 
             ['e', 5]) ]
    
    for i in list:
      print["".join([d for d in zip(*i)][0]), sum([d for d in zip(*i)][1])]
    

    x+y ,它只适用于循环的第一次迭代,因为只有2个值需要解包。但它在第二次迭代中不起作用。

    int str 在一起

    • 为了避免混淆,我将重命名变量 list lst
        4
  •  1
  •   DarrylG    2 年前

    [('ab', 3), ('cde', 12)] 结果

    lst = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])] # don't use list 
                                                                 # as variable name
    # One-liner using builtin functions sum, list and Walrus operator
    result = [(''.join(p[0]), sum(p[1])) for sublist in lst if (p:=list(zip(*sublist)))]
    

    • 总和
        5
  •  1
  •   Hariharan Ragothaman    2 年前

    这应该清楚明了。

    A = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])]
    
    result = []
    for tup in A:
        char, value = "", 0
        for x, y in tup:
            char += x
            value += y
        result.append([char, value])
    print(result)
    

    zip :

    result = []
    for tup in A:
        tmp = []
        for x in zip(*tup):
            if type(x[0]) == str:
                tmp.append(''.join(x))
            elif type(x[0]) == int:
                tmp.append(sum(x))
        result.append(tmp)
    print(result)
    

    样品O/P:

    [['ab', 3], ['cde', 12]]
    
        6
  •  1
  •   hamidreza samsami    2 年前

    result = [[''.join([x for x,y in item]),sum([y for x,y in item])] for item in lst]
    
        7
  •  1
  •   Deepeshkumar    2 年前

    看看这个。

    result = [("".join(list(zip(*tup))[0]), sum(list(zip(*tup))[1])) for tup in lst]