如何检查列表是否包含字符串的精确匹配?

How to check if list contains exact match of string?

我正在尝试检查我的列表中是否存在某个项目,但它必须完全匹配。我的代码无法正常工作。

import sys
fruitlist = str(sys.argv[2:]).upper()
print(sys.argv[1])
print(fruitlist)
if sys.argv[1].strip() in fruitlist:
        print(sys.argv[1], 'exact match found in list')

现在如果我 运行 它,就会发生这种情况。

$ python3 a.py STRAW apple pear strawberry
STRAW
['APPLE', 'PEAR', 'STRAWBERRY']
STRAW exact match found in list

STRAW 不在我的列表中,但因为草莓在列表中,它仍然说找到完全匹配。

我希望这对 STRAW 为假,仅对 STRAWBERRY 为真

fruitlist 是字符串,不是列表。
fruitlist = str(sys.argv[2:]).upper()sys.argv 转换为 str 然后应用大写。
为避免这种情况,您可以改为这样做:

fruitlist = [x.upper() for x in sys.argv[2:]]

完整代码:

import sys
fruitlist = [x.upper() for x in sys.argv[2:]]
print(sys.argv[1])
print(fruitlist)
if sys.argv[1].strip() in fruitlist:
        print(sys.argv[1], 'exact match found in list')

您的 fruitlist 实际上不是列表;它是一个字符串。这是正确的代码,它使它成为一个列表而不是一个字符串:

import sys
fruitlist = [str(a).upper() for a in sys.argv[2:]]
print(sys.argv[1])
print(fruitlist)
if sys.argv[1].strip() in fruitlist:
        print(sys.argv[1], 'exact match found in list')

也许你可以这样试试:

fruitlist = sys.argv[2:]
inp_arg = sys.argv[1]
mask = [f==inp_arg for f in fruitlist]

if_exists = True in mask

如果匹配的话mask list中的索引就是True,你可以检查True是否在mask中

您将列表转换为字符串,然后再转换为大写,您必须将列表项转换为大写:

import sys
fruitlist = [item.upper() for item in sys.argv[2:]]
if sys.argv[1].strip() in fruitlist:
        print(sys.argv[1], 'exact match found in list')

您想使用 == 来检查相等性:

import sys

term = sys.argv[1].strip().upper()
fruitlist = list(map(str.upper, sys.argv[2:]))


def search(term, lst):
    for item in lst:
        if item == term:
            return True


print(search(term, fruitlist))

输出:

python3 var.py foo bar baz foobar                                                                                                                                                       
>>> None

python3 var.py foo bar baz foo                                                                                                                                                           
>>> True