如何检查列表是否包含字符串的精确匹配?
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
我正在尝试检查我的列表中是否存在某个项目,但它必须完全匹配。我的代码无法正常工作。
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