Здесь у нас есть список строк с именем list_strings `

list_strings =["john", "sarah", "bianca", "savie", "sandy", "john", "harry", "john", "debra", "john"]

Если задано значение "john" и можем ли мы получить все строки до john, вывод должен выглядеть так!`

result = ["none", "sandy", "harry", "debra]
1
Debbie 18 Янв 2022 в 20:25

3 ответа

Лучший ответ

Вы можете использовать простой цикл for:

list_strings =["john", "sarah", "bianca", "savie", "sandy", "john", "harry", "john", "debra", "john"]
result = []
for i, j in enumerate(list_strings):
    if j == "john":
        if i:
            result.append(list_strings[i-1])
        else:
            result.append(None)
[None, 'sandy', 'harry', 'debra']
0
Ann Zen 18 Янв 2022 в 20:42

Вот как вы можете использовать встроенный метод zip:

list_strings =["john", "sarah", "bianca", "savie", "sandy", "john", "harry", "john", "debra", "john"]

s = "john"

print([i for i, j in zip(list_strings[:-1], list_strings[1:]) if j == s])

Выход:

['sandy', 'harry', 'debra']

Чтобы включить "none", когда первая строка в списке "john", вы можете сделать:

list_strings =["john", "sarah", "bianca", "savie", "sandy", "john", "harry", "john", "debra", "john"]

s = "john"

result = []
if list_strings[0] == "john":
    result.append("none")
for i, j in zip(list_strings[:-1], list_strings[1:]):
    if j == s:
        result.append(i)
print(result)

Выход:

['none', 'sandy', 'harry', 'debra']
0
Ann Zen 18 Янв 2022 в 20:29

Существует, наверное, тысяча способов сделать это. Можно использовать понимание списка и перечислять как

def get_before(search_name:str, names:list[str]) -> list[str]:
    return [names[i-1] if i > 0 else 'none' for i, name in enumerate(names) if name == search_name]

get_before('john', list_string)
0
Simon Hawe 18 Янв 2022 в 20:30