Python 无法使三元运算符工作

Python 无法使三元运算符工作,python,Python,所以我有一个双重问题。我选择了卡片列表,它包含两个元素-卡片等级和套装,格式为:['6','c'] club=u\u2663 club的Unicode代码点 新列表=[如果i=='c'否则i,则所选卡片中i的俱乐部] 我想将“c”改为俱乐部的图形表示,但这个表达式不起作用。我试着找了很多,但找不到哪里不对劲。它说:SyntaxError:无效语法 第二个问题,若我删除else语句,那个么它会工作,但它不会输出我想要的内容,它看起来像:[u'\u2663'],甚至认为printclub会输出♣.

所以我有一个双重问题。我选择了卡片列表,它包含两个元素-卡片等级和套装,格式为:['6','c']

club=u\u2663 club的Unicode代码点

新列表=[如果i=='c'否则i,则所选卡片中i的俱乐部]

我想将“c”改为俱乐部的图形表示,但这个表达式不起作用。我试着找了很多,但找不到哪里不对劲。它说:SyntaxError:无效语法

第二个问题,若我删除else语句,那个么它会工作,但它不会输出我想要的内容,它看起来像:[u'\u2663'],甚至认为printclub会输出♣.


EDIT:newList=[club if i=='c'else i for i in selected cards]是正确的语法,这多亏了xtofl。

也许你最好使用dict:

symbols = {
  'c': u"\u2663",
  'h': u"....hearts",
  ...
}

newList = [symbols[card] for card in selectedCards]
或者,如果您想实现功能化:

map( symbols.get, selectedCards )

至于第一个问题:cfr

对于第二个问题,打印,问题是:python只提供了“a”列表表示;如果您想要字符串形式,这对我来说很有用:

print("".join(newList))
提示:明智的做法是在包含所有这些逻辑的card类中表示您的卡,有点像

class Card:
   def __init__(self, rank, suit):
      self.rank = rank
      self.suit = suit

   symbols = {'c': u"\u2663", ...}

   def __str__(self):
      return "".join([self.rank, Card.symbols[self.suit]])

我知道有很多方法可以完成同样的任务,但我仍然想知道为什么这种方法行不通。无论如何,您的实现给了我error键error:'Q',其中Q根据等级而变化。我想我需要在这里加入条件来检查它是等级还是套装。要回答列表理解问题,请看xtofl,是的,这个问题已经解决了:newList=[俱乐部如果I='c'否则I代表我在所选卡片中]!但是我再次得到了这样的['Q',u'\u2663'],这是我的第二个问题。是的,现在得到了:谢谢。这个方法提供了一个很好的打印字符串,而不是对象属性的实际值,所以uu str_u_u_u______________________________?看,把两个问题分成两部分是个好主意。。。两个独立的问题:selectedCards是一个由两个元素组成的列表吗?这是一个由两个元素组成的列表,比如:['a','h']