如何在使用元组列表并尝试打印特定部分的数据时迭代python的for循环?

时间:2017-11-11 02:24:07

标签: python loops tuples

所以我的计划目标是为每个人分配2个不同价值的物品。

程序收到一个数字和元组列表。当我选择第一件商品时,这个数字就是所有人。

选择顺序是第一个人一直选择一个到最后一个然后最后一个选择然后向后一直到第一个。

现在我正在努力的是理解如何使用for循环来完成这些元组并打印出我选择的2个项目。要弄清楚有多少人实际上想要获取物品是通过获取所有可用物品并除以2.我也感到困惑

ex input:

(0, [('pizza', 12), ('chicken', 10),] )

所以在这个例子中程序应该打印出来:“披萨:12只鸡:10”

1 个答案:

答案 0 :(得分:0)

确保我正确地回答了问题:

  • 有n项和n / 2人
  • 列表中的第一个人获得最佳(最高价值)和最差(最低价值)商品。第二个人获得第二好的项目,第二个最差,等等。
  • 列表中有你身后有k个人,所以你处于n / 2-k
  • 的位置
  • 您想知道列表中的哪两项

如果你只想知道获得的两个项目,你就不需要循环了。您可以按值对项目进行排序,计算列表中的两个索引。它们将是n / 2 - k - 1(注意,索引是从零开始的!),并且n / 2 + k:

def which_items_do_i_get(people_after_me, items):
    # Get items sorted by value
    sorted_items = sorted(items, key=lambda x: -x[1])
    # Determine number of people
    number_of_people = len(items) // 2
    assert len(items) % 2 == 0  # Must be an even number of items
    assert people_after_me < number_of_people  # Need more items
    # Determine first and second item
    first_item = sorted_items[number_of_people - people_after_me - 1]
    second_item = sorted_items[number_of_people + people_after_me] 
    # Print them out
    for item_name, item_value in first_item, second_item:
        print '%s: %d' % (item_name, item_value)