免责声明:我不是在问如何检查列表中是否包含元素。我在问如何检查元素包含在哪个列表中。
考虑以下代码:
x = ["i", "hello", "great"]
y = ["what", "food"]
chosen = input("Input a word: ")
#what comes next?
我要打印变量chosen
所属的列表的名称(程序应打印x
,y
或什么都不打印)
我如何确定输入的单词属于哪个列表?
答案 0 :(得分:3)
x = ["i", "hello", "great"]
y = ["what", "food"]
chosen = input("Input a word: ")
if chosen in x:print("x")
if chosen in y:print("y")
elif chosen not in x:print("Not Found!")
答案 1 :(得分:2)
我将使用为快速查找而设计的数据结构。大概,您的列表都不会包含冲突的元素。在这种情况下, elements 是字典键的理想候选者。这需要相对不可思议的方法dict.fromkeys
:
x = [...]
y = [...]
mapping = {}
mapping.update(dict.fromkeys(x, 'x'))
mapping.update(dict.fromkeys(y, 'y'))
现在您有了一本字典,可以立即告诉您单词的所属位置:
word = input().casefold()
print(mapping.get(word, 'Not Found!'))
我可能会将其放在一个类中以管理字典,列表和查找。您可以使用以下任何名称注册列表:
class WordLists(dict):
def __init__(self):
super ().__init__()
def register_list(name, data):
self.update(dict.fromkeys(data, name))
def __getitem__(self, word):
return super().get(word.casefold(), 'Not Found')
wl = WordList()
wl.register('x', x)
wl.register('y', y)
print(wl[input()])
您需要记住的一部分是python变量可以绑定到任意数量的名称。这就是为什么我建议明确说明要为每个列表返回的名称。完全不必与变量名相关。
答案 2 :(得分:0)
pairs = ((x, "x"), (y, "y"))
[print(lst_name) for lst, lst_name in pairs if chosen in lst]
第一个语句构造类型为(list, list_name)
的成对元组,第二个语句是列表理解,其副作用是 打印相应列表的名称