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

元组列表中第一个字符串后面有多少个整数

  •  0
  • Darkhail  · 技术社区  · 8 年前

    所以我正在学习使用python,在使用元组列表时遇到了问题。我试图在每个元组的名称后计算每个元组中的整数数。 例如[('bagels',4,3,2,1),('pies',6,5,4,2),('cakes',12,11,10,0)]

    我的目标是能够保存每个元组的名称,然后计算它们后面的整数数。我需要整数的数量,因为我必须考虑多个人想要吃东西。

    我的最终目标是这样的。蛋糕:12个馅饼:6个,如果我印了2份最值钱的食物。我该怎么跳过字符串?

    2 回复  |  直到 8 年前
        1
  •  1
  •   cs95 abhishek58g    8 年前

    使用 听写理解 :

    r = {v[0] : max(v[1:] for v in data}
    
    print(r)
    {'bagels': 4, 'cakes': 12, 'pies': 6}
    

    这相当于以下内容:

    r = {} # declare a dict
    for v in data:
        i = v[0]        # find the item name
        j = max(v[1:])  # find the max of all integers following the item
    
        r[i] = j     # add an entry into the dictionary
    

    细节

    • 口述理解是一种简洁的表达方式 for python中的循环。

    • v[0] 检索0 元素,并被分配键

    • `max(v[1:])查找该项后面的整数的max

    最后,如果要显示结果 r ,您可以迭代它:

    for k, v in r.items():
        print('{}:{}'.format(k, v))
    
    cakes:12
    bagels:4
    pies:6
    

    请注意,字典是 未订购 ,因此您不太可能按输入条目的顺序打印结果。在这种情况下,您可以考虑使用 list :

    r = ['{}:{}'.format(v[0], max(v[1:])) for v in data]
    
    print(r)
    ['bagels:4', 'pies:6', 'cakes:12']
    

    印刷也以类似的方式进行。呼叫 sorted 具有 reversed=True 如果要打印从最高到最低的值。

    for i in sorted(r, reverse=True):
        print(i)
    
    cakes:12
    pies:6
    bagels:4
    
        2
  •  0
  •   Ajax1234    8 年前

    你可以使用字典:

    s= [('bagels',4,3,2,1), ('pies',6,5,4,2), ('cakes',12,11,10,0)]
    data = {i[0]:i[1:] for i in s}
    

    要找到最高价值的食物:

    highest_val = 2
    final_treats = sorted(data.items(), key=lambda x:max(x[-1]))[-highest_val:]
    

    输出:

    [('pies', (6, 5, 4, 2)), ('cakes', (12, 11, 10, 0))]