检查所包含的元组。

4

这段代码返回True。

a = [('e', 4), ('r', 2), (' ', 2), ('h', 2), ('A', 1), ('t', 1), ('y', 1)]
print(('e', 4) in a) # True

如果我不知道'e'后面的数字,我该如何检查那个字母是否在列表中

print(('e',) in a) # False

any(letter == 'e' for letter, _ in a) - Azat Ibrakov
3个回答

3
你需要暴力搜索。
检查列表中的任何一个元组是否将第一个成员设置为'e'
a = [('e', 4), ('r', 2), (' ', 2), ('h', 2), ('A', 1), ('t', 1), ('y', 1)]

print(any(tup[0] == 'e' for tup in a))

这将会得到:

True

1
在我看来,“你需要暴力搜索”是误导性的,因为列表上的“in”基本上可以做到同样的事情。 - tobias_k

2
你可以先将list转换为dict
a = [('e', 4), ('r', 2), (' ', 2), ('h', 2), ('A', 1), ('t', 1), ('y', 1)]
b = dict(a)

print(('e', 4) in a)

print('e' in b)

输出两次 True

这段代码利用了一个 dict,它可以直接取一个list中的一组tuples作为输入,把每个tuple的第一个元素变成key。然后你就可以在结果dict中快速查找key。


首先使用dict而不是元组列表可能更有意义,但只是为了让in工作而转换为dict是否合适呢? - tobias_k
但是如果嵌套元组每个都有3个元素,这种方法将无法工作,因此暴力求解更好。 - Mark juzefin
你在问题中表明每个元组都只有两个元素。你是说这些元组可以有任意数量的元素吗? - quamrana

1
使用列表推导式获取每个元组的第一个组件。然后使用现有方法检查e是否出现在结果列表中。
a = [('e', 4), ('r', 2), (' ', 2), ('h', 2), ('A', 1), ('t', 1), ('y', 1)]
print('e' in [e[0] for e in a])
# True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接