简体   繁体   English

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

[英]How to check if list contains exact match of string?

I am trying to check if an item exists in my list, but it has to be exact match.我正在尝试检查我的列表中是否存在某个项目,但它必须完全匹配。 And my code isn't working right.而且我的代码无法正常工作。

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')

Now if I run it, this is what happens.现在,如果我运行它,就会发生这种情况。

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

STRAW isn't really in my list, but because strawberry is in the list, it still says exact match found. STRAW 不在我的列表中,但因为草莓在列表中,它仍然说找到了完全匹配。

I want this to be false for STRAW and true only for STRAWBERRY我希望这对于 STRAW 是错误的,并且仅对于 STRAWBERRY 是正确的

fruitlist is a string, not a list. Fruitlist 是一个字符串,而不是一个列表。
fruitlist = str(sys.argv[2:]).upper() converts the sys.argv to str then applies the upper case. fruitlist = str(sys.argv[2:]).upper()sys.argv转换为str然后应用大写。
to avoid this you can do this instead:为避免这种情况,您可以这样做:

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

full code:完整代码:

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')

Your fruitlist isn't actually a list;你的fruitlist清单实际上不是一个清单; it is a string.它是一个字符串。 Here is the correct code, which makes it a list not a string:这是正确的代码,它使它成为一个列表而不是一个字符串:

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')

Maybe you could try it this way:也许你可以这样试试:

fruitlist = str(sys.argv[2:]).upper()
inp_arg = sys.argv[1]
mask = [f==inp_arg for f in fruitlist]

if_exists = True in mask

if there is any match, the index in mask list would be True, and you can check if True is in mask如果有任何匹配,掩码列表中的索引将为 True,您可以检查 True 是否在掩码中

You want to use == to check for equality:您想使用==来检查相等性:

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))

Out:出去:

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

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

you convert list to str and then to upper case, you must convert itmes of list to upper case:您将列表转换为 str 然后大写,您必须将列表的项目转换为大写:

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')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM