我正在找一个可以告诉我为什么这个列表理解不起作用的人
new_cards = [p if usr_card in deck1
else p if usr_card in deck2
else 'Removed' for p in cards]
cards
是这样的列表列表>> cards = [ [deck1], [deck2] ]
user_cards
是一个项目,可以存在于其中一个套牌deck1
或deck2
中,如果不是我想在该索引中生成该项目,则删除'串
但问题是,即使其中一个牌组中存在usr_card
,它就会被移除'
答案 0 :(得分:1)
重写此内容以清楚显示内联if
语句并稍微折叠逻辑:
new_cards = [
(p
if usr_card in deck1
or usr_card in deck2
else 'Removed')
for p in cards
]
这相当于:
if usr_card in deck1 or usr_card in deck2:
new_cards = [p for p in cards]
else:
new_cards = ['Removed'] * len(cards)
我不认为这就是你想要的。
也许您正在寻找迭代每个子卡片作为移除卡片?
new_cards = [
[(card if card in deck1+deck2 else 'Removed') for card in deck]
for deck in cards
]
不幸的是,我并不确定每个变量代表什么或预期输出是什么,所以我无法准确地说出你想要完成的事情。
但 I recommend copy-pasting your way into a list comprehension ,当您正在学习时。这是我在弄清楚如何编写它们时遇到的方法。
答案 1 :(得分:0)
如上所述,您的代码返回:
取决于usr_card是否在卡片中。
那是因为p迭代了卡片的元素。卡片只有两个元素:deck1和deck2。
看起来,但你的要求并不清楚,你想要处理甲板的连接。
cards = deck1 + deck2
此外,根据定义,永远不会打印已删除,如果usr_card不在卡片中,则该项目不能被标记。
请更清楚您的业务规则是什么。
答案 2 :(得分:0)
new_cards = [p if p in usr_card else 'removed' for deck in cards for p in deck]
应该这样做,虽然可能需要稍微调整一下,具体取决于您的代码究竟发生了什么,我不太清楚。