#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]
Поскольку список представляет собой список пар ключ / значение, где ключ уникален, вы можете преобразовать его в словарь и получить прямой поиск.