如何检查元素包含在哪个列表中

时间:2018-09-12 03:31:45

标签: python python-3.x

免责声明:我不是在问如何检查列表中是否包含元素。我在问如何检查元素包含在哪个列表中。

考虑以下代码:

x = ["i", "hello", "great"]
y = ["what", "food"]
chosen = input("Input a word: ")
#what comes next?

我要打印变量chosen所属的列表的名称(程序应打印xy或什么都不打印)

我如何确定输入的单词属于哪个列表?

3 个答案:

答案 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)的成对元组,第二个语句是列表理解,其副作用是 打印相应列表的名称