簡體   English   中英

提高列表理解力

[英]Improving a List Comprehension

下面的列表理解實現了預期的結果/輸出:

  1. 列表中的每個元組按順序索引
  2. 這些名字按西裝組合在一起
  3. 名稱順序一致

代碼(紙牌玩具示例):

Suits = ["Hearts"]*3 +["Diamonds"]*3
Names = ["Two","Ten","King"]

z = [(i,Names[(i-1)%3],Suits[((i-1)%6)]) for i in range(1,7)]

Output z:

[(1, 'Two', 'Hearts'),
 (2, 'Ten', 'Hearts'),
 (3, 'King', 'Hearts'),
 (4, 'Two', 'Diamonds'),
 (5, 'Ten', 'Diamonds'),
 (6, 'King', 'Diamonds')]

它起作用是因為原始的Suits列表從["Hearts","Diamonds"] to["Hearts"]*3 +["Diamonds"]*3.

這感覺做作; 雖然它有效,但我正在尋找更好的解決方案。

使用enumerateitertools.product

from itertools import product

ranks = ["Two", "Ten", "King"]
suits = ["Hearts", "Diamonds"]
z = [(i, r, s) for i, (s, r) in enumerate(product(suits, ranks), start=1)]

Output:

[(1, 'Two', 'Hearts'),
 (2, 'Ten', 'Hearts'),
 (3, 'King', 'Hearts'),
 (4, 'Two', 'Diamonds'),
 (5, 'Ten', 'Diamonds'),
 (6, 'King', 'Diamonds')]

您可以使用itertools.productenumerate

from itertools import product

suits = ["Hearts", "Diamonds"]
sames = ["Two","Ten","King"]

cards = [(index, suit, rank) for index, (suit, rank) in enumerate(product(sames, suits), start=1)]

print(cards)

您可以使用帶有枚舉的兩級嵌套理解來獲得編號:

Suits = ["Hearts","Diamonds"]
Names = ["Two","Ten","King"]


r = [(j+i,n,s) for j,s in enumerate(Suits) 
               for i,n in enumerate(Names,j*len(Suits)+1) ]

print(*r,sep="\n")
(1, 'Two', 'Hearts')
(2, 'Ten', 'Hearts')
(3, 'King', 'Hearts')
(4, 'Two', 'Diamonds')
(5, 'Ten', 'Diamonds')
(6, 'King', 'Diamonds')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM