2017-11-11 323 views
-1

所以我的課程目標是向每個人分發2項不同的價值。如何在使用元組列表的情況下迭代Python for循環並嘗試打印出特定部分的數據?

該程序收到一個數字和元組列表。這個數字是我選擇我的第一個項目後所有的人。

挑選順序是第一個人選擇一個到最後一個,然後再選擇最後一個選擇,然後一直到第一個選擇。

現在我正在努力的是瞭解如何使用循環來通過這些元組並打印出我選擇的2個項目。爲了弄清楚人實際上是試圖多少讓項目是通過利用所有可用的物品和除以2,我也由

前輸入困惑:

(0, [('pizza', 12), ('chicken', 10),]) 
這個例子程序

所以應打印出: 「比薩餅:12雞:10」

+0

謝謝你的編輯 – Darkhail

回答

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) 
+0

是和我們的目標是顯然的最好挑物品,所以你必須刪除以前的人會採取的。 – Darkhail

+0

哦,我明白了。那麼只需按照價值對商品進行排序即可。更新瞭解決方案。 –

相關問題