返回找到字符串的列表的名称

2024-07-03 06:50:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在可以通过使用大量for循环来完成我想要的任务,但是我觉得应该有一个更简单的方法。你知道吗

我希望我的程序返回包含在字符串中找到的单词的列表的名称。我目前正在做:

my_car = ["blue","ford"]
dads_car = ["green","audi"]
car = input('Tell me either the make or colour of your car: ').lower()
whos_car = ""
for word in my_car:
    if word in car:
        whos_car = "my_car"
    else:
        whos_car = "unknown"
for word in dads_car:
    if word in car:
        whos_car = "dads_car"
    else:
        whos_car = "unknown"
print(whos_car)

但我要做的是编写一个for循环,遍历每个列表,无论哪个列表包含单词,都返回列表名。 这样做行不通,但希望能让事情更清楚:

for word in my_car,dads_car:
    if word in car:
        whos_car = the list name it found it in...
    else:
        whos_car = "Unknown"

希望这有道理。你知道吗

非常感谢!你知道吗


Tags: the方法in列表forifmyit
3条回答

澄清后更新

使用字典和函数:

def get_list(cars, car):
    car_parts = car.split()
    for list_name, car_info in cars.items():
        for item in car_info:
            if item in car_parts:
                return list_name
    return 'unknown'

my_car = ["blue","ford"]
dads_car = ["green","audi"]
cars = {'my_car': my_car, 'dads_car': dads_car}
car = 'the car green'
print(get_list(cars, car))

现在,如果您设置:

car = 'the car green'

它打印:

dads_car

但是:

car = 'light-green truck'

印刷品:

unknown

旧的尝试

看起来是字典的好用法:

my_car = ["blue","ford"]
dads_car = ["green","audi"]

cars = {'my_car': my_car, 'dads_car': dads_car}

car = 'green'

for list_name, car_info in cars.items():
    if car in car_info:
        print(list_name)
        break
else:
    print('unknown')

现在,如果您设置:

car = 'green'

它打印:

dads_car

但是:

car = 'yellow'

印刷品:

unknown

您可以向cars添加任意数量的项,而无需更改代码。所以没有大量的for循环。你知道吗

If present in both lists, then it should show the first list it found in.

你一找到匹配的就跳出了循环。 只有在执行break时,else:下的代码才会被访问。 从Python3.6开始。词典按其所用的顺序排列。 因此,将首先搜索my_car。你知道吗

具有不同逻辑的替代解决方案:

my_car = ["blue","ford"]
dads_car = ["green","audi"]

cars = {'my_car': my_car, 'dads_car': dads_car}

found = False
for list_name, car_info in cars.items():
    for item in car_info:
        if item in car:
            print(list_name)
            found = True
            break
    if found:
        break
else:
    print('unknown')

现在,如果您设置:

car = 'light-green'

它打印:

dads_car

或更短的函数:

def get_list(cars, car):
    for list_name, car_info in cars.items():
        for item in car_info:
            if item in car:
                return list_name
    return 'unknown'

print(get_list(cars, car))

您可以使用locals()

def lookup(query):
    my_car = ["blue","ford"]
    dads_car = ["green","audi"]

    for name, vals in locals().items():
        #  you need a condition to filter the variables you want to search in!
        if name.endswith('_car') and query in vals:
            return name
    return 'unknown'

result = lookup('green')
print(result)

result = lookup('green2')
print(result)

印刷品:

dads_car
unknown

一个简单的方法是,当在列表中找不到whos_car时,不要更改它的值,只有在第一个列表中找不到单词时,才搜索第二个列表。您的代码可以简单地变成:

my_car = ["blue","ford"]
dads_car = ["green","audi"]
car = input('Tell me either the make or colour of your car: ').lower()
whos_car = None          # None is more "Pythonic"
for word in my_car:
    if word in car:
        whos_car = "my_car"
        break            # no need to continue looping
if whos_cas is None:     # don't search second list if word has already be found
    for word in dads_car:
        if word in car:
            whos_car = "dads_car"
            break
if whos_car is None: whos_car = "unknow"   # if we haven't found anything...
print(whos_car)

相关问题 更多 >