【问题标题】:How to check which list an element is contained in如何检查元素包含在哪个列表中
【发布时间】:2018-09-12 03:31:44
【问题描述】:

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

考虑这段代码:

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

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

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

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python python-3.x


【解决方案1】:
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!")

【讨论】:

    【解决方案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 变量可以绑定到任意数量的名称。这就是为什么我建议明确说明要为每个列表返回的名称。它根本不必与变量的名称相关。

    【讨论】:

      【解决方案3】:
      pairs = ((x, "x"), (y, "y")) 
      
      [print(lst_name) for lst, lst_name in pairs if chosen in lst]
      

      第一个语句构造(list, list_name) 类型对的元组,第二个语句是列表推导式,它作为副作用打印相应列表的名称。

      【讨论】:

        猜你喜欢
        • 2016-06-25
        • 2021-06-24
        • 2014-07-31
        • 2014-04-30
        • 2016-05-12
        • 2016-09-16
        • 1970-01-01
        • 2020-08-18
        相关资源
        最近更新 更多