【问题标题】:Using an for/in test with a listed list对列出的列表使用 for/in 测试
【发布时间】:2013-04-06 08:17:36
【问题描述】:

我一直在尝试检查用户提交的字符串是否包含某个子字符串,并在打印回复时替换它们。

list_in_list = [["I", "you"], ["We", "Us"], ["Her", "Him"]]

我一直在使用以下代码来测试这些值是否作为调试回复:

print [row[0] for row in list_in_list] in reply

reply 是用户输入的字符串

但是它返回这个错误:

TypeError: 'in <string>' requires string as left operand, not list

我也无法弄清楚如何检索要替换的正确值。我正在考虑用

循环它
reply.replace(list_in_list[0][x], list_in_list[0][x]) 

其中 x = 执行的循环数量,但我不知道如何编码。

【问题讨论】:

  • 你希望[row[0] for row in list_in_list] in reply做什么?
  • 我期待它返回一个布尔值

标签: python list loops replace


【解决方案1】:

你的意思是这样的:

print [row[0] for row in list_in_list if row[0] in reply]

这将为您提供第一列中的值,但前提是它们是in reply。例如:

>>> list_in_list = [["I", "you"], ["We", "Us"], ["Her", "Him"]]
>>> reply = "I like cake"
>>> print [row[0] for row in list_in_list if row[0] in reply]
['I']
>>> reply = "We met Her yesterday"
>>> print [row[0] for row in list_in_list if row[0] in reply]
['We', 'Her']

【讨论】:

    【解决方案2】:

    要测试reply 中是否有任何值,您可以执行类似的操作

    print any(row[0] in reply for row in list_in_list)
    

    替换reply中的所有值

    for row in list_in_list:
        reply = reply.replace(row[0], row[1])
    print reply
    

    回应您的评论

    reply = "This is a test I We Her"
    #rw = replace_with
    rw = {"I":"You", "We":"Us", "Her":"Him"}
    
    reply = " ".join([rw[word] if word in rw else word for word in reply.split()])
    
    print reply
    

    根据您输入的复杂程度,您可能会考虑使用正则表达式或研究自然语言处理(用于处理缩写等)。

    【讨论】:

    • 很好的答案,但它不断替换 'I's found in 在字符串中并替换它们。例如。 “这是一个测试”->“你是一个测试”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    相关资源
    最近更新 更多