如果“某个元素”在元组列表的特定位置

2024-09-29 05:33:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表:

MyList = [('name1', 'surname1', 'age1'), ('name2', 'surname2', 'age2'), ...]

我想检查一下“如果我的列表中有'name2',比如:

if 'name2' in MyList[?][0]: 
    print "do something"

如果我写if 'name2' in MyList[0],我将访问元素('name1','names1','age1'),而我的意思是访问列表中每个元组的位置0处的元素。我想有一个联会这样做,但我是一个新手,不能在网上找到自己,有人能帮我这个吗?你知道吗


Tags: in元素列表ifdo元组printname1
3条回答

我不确定这是不是最有效的方法,但你可以用这个。你知道吗

>>>MyList = [('name1', 'surname1', 'age1'), ('name2', 'surname2', 'age2'), ...]
>>> if 'name2' in zip(*MyList)[0]:
              #do something. 

关键是它创建了原始列表的转置。警告:所有元组的长度必须相同,以避免数据丢失。你知道吗

编辑:zip的官方docs。你知道吗

用于解包参数列表中的*运算符的官方docs。你知道吗

可以使用^{}函数和生成器函数,如下所示

if any("name2" in name for name, surname, age in my_list):
    # do something

在这里,元组的所有元素在迭代时都被解压到name, surname, age。所以,我们可以简单地检查name2是否在名称中。这和写作是一样的

if any("name2" in current_item[0] for current_item in my_list):

这将是有效的,因为它在匹配后立即产生True,其余的项不需要检查。你知道吗

如果您正在寻找比较两个字符串的方法,那么应该使用==运算符,如下所示

if any("name2" == name for name, surname, age in my_list):
# do something

听起来你可以从使用字典中获益:

my_dict = dict( (x[0],(x[1],x[2])) for x in MyList)

然后可以检查是否存在'names2' in my_dict,也可以直接访问数据my_dict['names2']

相关问题 更多 >