在元组列表中的第一个字符串后存在多少个整数

时间:2017-11-10 23:16:29

标签: python list tuples

所以我正在学习使用python,而且我在使用元组列表时遇到了麻烦。我试图计算每个元组名称后每个元组中的整数数。 恩。 [('百吉饼',4,3,2,1),('馅饼',6,5,4,2),(' cake',12 ,11,10,0)]

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

我的最终目标是。恩。蛋糕:12种馅饼:6如果我打印出2种价值最高的蛋糕。我该怎么做才能跳过字符串?

2 个答案:

答案 0 :(得分:1)

使用字典理解

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

<强>详情

  • dict理解是在python中表示for循环的简洁方法。

  • v[0]检索0 th 元素,并为其分配密钥

  • `max(v [1:])查找项目
  • 后面的整数的最大值

最后,如果你想显示结果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

答案 1 :(得分:0)

您可以使用字典:

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))]