#python-3.x #tuples #list-comprehension #nested-lists #minimum
#python-3.x #кортежи #список-понимание #вложенные списки #минимум
Вопрос:
У меня есть вложенный список целых чисел и кортежей:
orders = [[1, ('5464', 49.96), ('8274', 233.82), ('9744', 404.55)]
[2, ('5464', 99.91), ('9744', 404.55)]
[3, ('5464', 99.91), ('88112', 274.89)]
[4, ('8732', 93.93), ('7733', 208.89), ('88112', 199.75)]]
Я хочу получить минимум (вывод):
[(1, '5464')
(2, '5464')
(3, '5464')
(4, '8732')]
Как мне получить вывод, используя только понимание списка (без циклов и других функций)?
My try:
p = [[x if type(x) != tuple else min(y[1:])[1] for x in y] for y in orders]
print(p)
output:
[[1, 49.96, 49.96, 49.96], [2, 99.91, 99.91], [3, 99.91, 99.91], [4, 208.89, 208.89, 208.89]]
Ответ №1:
Мы можем использовать срезы, чтобы отделить первый элемент от остальных элементов в каждом из внутренних списков. Обратите внимание, что каждый элемент orders
является a list
, поэтому проверка типов не требуется. Мы можем использовать срез, чтобы отделить первый элемент от остальных элементов, поскольку первый элемент отличается.
Итак, в понимании списка мы выводим кортеж, где для каждого списка lst
, содержащегося в orders
, мы
- Использовать
lst[0]
в качестве первого элемента в нашем кортеже - возьмите
min(lst[1:])
остаток отlst
(конечно, вы можете использовать пользовательскийkey
здесь, если хотите). Это приведет к получению 2-х кортежей, подобных('5464', 49.96)
- Возьмите
[0]
th элемент того, который будет'5464'
в этом примере.
- Возьмите
Это дает результат, который вы ищете:
orders = [
[1, ('5464', 49.96), ('8274', 233.82), ('9744', 404.55)],
[2, ('5464', 99.91), ('9744', 404.55)],
[3, ('5464', 99.91), ('88112', 274.89)],
[4, ('8732', 93.93), ('7733', 208.89), ('88112', 199.75)],
]
output = [(lst[0], min(lst[1:])[0]) for lst in orders]
print(output)
# [(1, '5464'), (2, '5464'), (3, '5464'), (4, '7733')]
Комментарии:
1. Привет, вывод
4
не является ожидаемым результатом.2. Почему это, 4-й элемент является максимальным, а не минимальным? Понимание списка выглядит правильно.
3. Я получил решение, которое выводит правильный 4-й элемент, outplut = [(lst[0], min(lst[1:], key=lambda x:x[1])[0]) для lst в порядках]