Python 理解疑难解答
Python Comprehensions troubleshooting
我在正确设置 if 语句时遇到问题。
这是我的代码:
def task_13():
Main_meal=['Meat','Cheese','Fish']
addons=['Potatoes','Rice','Salad']
my_meal=[(x+y) for x in Main_meal for y in addons if (x+y)!= 'FishRice' and 'CheeseRice']
print(my_meal)
我的问题是,为什么 Python 过滤掉了 'CheeseRice' ,但只过滤掉了 'FishRice' 选项。
这是我的输出:
['MeatPotatoes', 'MeatRice', 'MeatSalad', 'CheesePotatoes', 'CheeseRice', 'CheeseSalad', 'FishPotatoes', 'FishSalad']
感谢您的建议。
这里是官方的reference on Python operator precedence,注意and
的优先级低于!=
,所以先计算!=
。此外,and
是一个简单的运算符,它接受两边的布尔值,而 returns 是一个表示它们的逻辑 AND 的布尔值,它不会执行您试图让它执行的操作。
而不是
if (x+y)!= 'FishRice' and 'CheeseRice'
你需要:
if (x+y)!= 'FishRice' and (x+y) != 'CheeseRice'
或者
if (x+y) not in ('FishRice', 'CheeseRice')
我在正确设置 if 语句时遇到问题。
这是我的代码:
def task_13():
Main_meal=['Meat','Cheese','Fish']
addons=['Potatoes','Rice','Salad']
my_meal=[(x+y) for x in Main_meal for y in addons if (x+y)!= 'FishRice' and 'CheeseRice']
print(my_meal)
我的问题是,为什么 Python 过滤掉了 'CheeseRice' ,但只过滤掉了 'FishRice' 选项。
这是我的输出:
['MeatPotatoes', 'MeatRice', 'MeatSalad', 'CheesePotatoes', 'CheeseRice', 'CheeseSalad', 'FishPotatoes', 'FishSalad']
感谢您的建议。
这里是官方的reference on Python operator precedence,注意and
的优先级低于!=
,所以先计算!=
。此外,and
是一个简单的运算符,它接受两边的布尔值,而 returns 是一个表示它们的逻辑 AND 的布尔值,它不会执行您试图让它执行的操作。
而不是
if (x+y)!= 'FishRice' and 'CheeseRice'
你需要:
if (x+y)!= 'FishRice' and (x+y) != 'CheeseRice'
或者
if (x+y) not in ('FishRice', 'CheeseRice')