Можно ли сократить этот цикл for до одной строки?

#python #python-3.x

#python #python-3.x

Вопрос:

Код Python:

 arr = [['name1', 101], ['name2', 234], ['name3', 456]]
nametolookfor = input("Please enter the name: ")
data = 0
for value in arr:
    if value[0] == nametolookfor:
        otherdata = value[1]
 

Мне было интересно, можно ли сократить цикл for и его содержимое до одной строки.

Я пытался использовать понимание списка, но, похоже, не могу заставить его работать.

Комментарии:

1. otherdata = dict(arr).get(nametolookfor) .

Ответ №1:

Вы можете использовать понимание списка для фильтрации элементов массива, имя которых совпадает, затем выбрать только значение и из него извлечь первое:

 >>> arr = [['name1', 101], ['name2', 234], ['name3', 456]]
>>> nametolookfor = 'name2'
>>> [v for (n, v) in arr if n == nametolookfor][0]
234
 

Поскольку ваш список представляет собой список пар ключ / значение, где ключ (по определению) уникален, вы также можете превратить его в словарь и вместо этого выполнить прямой поиск:

 >>> lookup = dict(arr)
>>> lookup[nametolookfor]
234
 

Конечно, если ваш arr является статическим, вы можете просто объявить его как словарь с самого начала, чтобы избавить вас от необходимости выполнять преобразование:

 >>> lookup = { 'name1': 101, 'name2': 234, 'name3': 456 }
>>> lookup[nametolookfor]
234
 

Ответ №2:

Я думаю, это должно быть близко к тому, что вы хотите. Использование next позволяет избежать некоторых шаблонов позже, чтобы проверить, существует ли значение.

 next(value[0] for value in are if value[0] == nametolookfor, None)
 

Ответ №3:

Да, это возможно в понимании списка. Следуйте этому

 [value[1] for value in arr if value[0] == nametolookfor]
 

Please enter the name: имя1

Вывод: [101]

Предположим, что ваш список arr = [['name1', 101], ['name2', 234], ['name3', 456], ['name1', 202], ['name1', 303]] и набор входных nametolookfor = name1 данных, тогда результат будет

 [101, 202, 303]
 

Ответ №4:

Попробуйте это:

 otherdata = dict(arr)[nametolookfor]
 

Поскольку список представляет собой список пар ключ / значение, где ключ уникален, вы можете преобразовать его в словарь и получить прямой поиск.