新手疑惑:tuple in list这个布尔表达式,为什么会返回一个tuple?

python版本:3.11.4

故事背景

作为一名入了N遍门的新手:expressionless:,又一次开始了基础知识学习,这次下定决心一定要按照教材一笔一划(一键一码)的学完!
当我学到if语句时,碰到了一个示例,是判断一个元素在列表中是否存在。

requested_toppings = ['mushrooms', 'extra cheese']
if 'mushrooms' in requested_toppings:
     print("Adding mushrooms.")

出现转折

我心血来潮,心想如果判断两个元素是否在一个列表中呢?(差生点子多)于是我撸下了以下代码:

requeseted_toppings = ['mushrooms', 'onions', 'pineapple']
a = 'mushrooms', 'onions' in requeseted_toppings
print(a)
print(type(a))

返回结果:

('mushrooms', True)
<class 'tuple'>

WHY?

为什么表达式会返回这样一个tuple?怎么理解这个表达式?:

'mushrooms', 'onions' in ['mushrooms', 'onions', 'pineapple']
讨论数量: 6
Jason990420

建立Tuples的方法

  1. 于 () 符号中输入资料,并且以逗号区隔。
  2. 不加 () 符号,直接指派资料,并且以逗号区隔,Python会预设为Tuples(元组)资料型态,不过要注意的是如果只有一个资料,一定要再加一个逗号。
  3. 使用tuple()方法,传入Iterable(可叠代的)物件来建立Tuples(元组)。
  4. 使用 * 符号来建立Tuples(元组)。

你的语句就是第2种 !

正确的作法如下

def all_in(subset, lst):
    return all(map(lambda x:x in lst, subset))

subset1 = ('mushrooms', 'onions')
subset2 = ('mushrooms', 'onions', 'apple')
lst     = ['mushrooms', 'onions', 'pineapple']

print(all_in(subset1, lst))
print(all_in(subset2, lst))
True
False

或者使用set

subset1 = {'mushrooms', 'onions'}
subset2 = {'mushrooms', 'onions', 'apple'}
fullset = {'mushrooms', 'onions', 'pineapple'}

print(subset1.issubset(fullset))
print(subset2.issubset(fullset))
True
False
8个月前 评论
txmsuper (楼主) 8个月前

我明白了,'mushrooms', 'onions' in requeseted_toppings 这个表达式的意思是(字符串,布尔表达式)这个元组,所以当执行 a = 'mushrooms', 'onions' in requeseted_toppings 的时候,会把计算后的这个元组复制给a变量,所以才会出现 ('mushrooms', True) 这个结果。

8个月前 评论

a = 'mushrooms', 'onions' in requeseted_toppings 只不过是省略了括号而已。其实你应该也见过,return a, b 这种形式的返回值,这也是 tuple

8个月前 评论
txmsuper (楼主) 7个月前

file 第一步得到True,然后把两个放进元组赋值给a

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!