#python
#python
Вопрос:
Я пытаюсь найти способ получить максимальную цену и наименьшее количество из вложенного списка
Первое число — это цена, а второе — количество, поэтому 10 будет ценой, а 50 — количеством в «мышь, 10, 50»
items=[["mouse,10,50"],["pen,20,50"],["pencil,30,30"],["sharpner,40,40"],["ruler,50,10"]]
max_price=max(items)
Комментарии:
1. Каков желаемый результат?
["ruler,50,10"]
?2. max_price = 50, lowest_qty = 10
3. что, если есть элемент, который имеет [60, 20]
Ответ №1:
Используется math
для присвоения бесконечности lowQty
и с помощью split()
для получения индексированного значения из элементов в списке:
import math
items=[["mouse,10,50"],["pen,20,50"],["pencil,30,30"],["sharpner,40,40"],["ruler,50,10"]]
maxPrice = 0
lowQty = math.inf
for elem in items:
maxPrice = max(maxPrice, int(elem[0].split(",")[1]))
lowQty = min(lowQty, int(elem[0].split(",")[2]))
print("max_price: {}".format(maxPrice))
print("lowest_qty: {}".format(lowQty))
Сокращенная версия:
print("max_price: {}".format(max([int(elem[0].split(",")[1]) for elem in items])))
print("lowest_qty: {}".format(min([int(elem[0].split(",")[2]) for elem in items])))
ВЫВОД:
max_price: 50
lowest_qty: 10
Ответ №2:
Попробуйте
items=[["mouse,10,50"],["pen,20,50"],["pencil,30,30"],["sharpner,40,40"],["ruler,50,10"]]
max_price = 0
min_quantity = 1000000
for item in items:
temp = item[0].split(',')
if int(temp[1]) > max_price:
max_price = int(temp[1])
if int(temp[2]) < min_quantity:
min_quantity = int(temp[2])
print(max_price)
print(min_quantity)
Вывод
50
10
Ответ №3:
Самый простой способ, о котором я мог подумать, был бы:
items=[["mouse,10,50"],["pen,20,50"],["pencil,30,30"],["sharpner,40,40"],["ruler,50,10"]]
max_price = max([int(i[0].split(",")[1]) for i in items])
min_quantity = min([int(i[0].split(",")[2]) for i in items])
print(max_price)
print(min_quantity)
Ответ №4:
Вы могли бы использовать re
и split
для ,
символа в конце, например,
>>> import re
>>> items
[['mouse,10,50'], ['pen,20,50'], ['pencil,30,30'], ['sharpner,40,40'], ['ruler,50,10']]
>>> y = max(items, key=lambda x: map(int, re.findall(r'd ', x[0])))
>>> y
['ruler,50,10']
>>> z = y[0].split(',')
>>> z
['ruler', '50', '10']
>>> max_price, low_qty = map(int, z[1:])
>>> max_price, low_qty
(50, 10)
Ответ №5:
Вот ваше решение
вы можете поместить код в функцию и передавать элементы в качестве ее аргументов
from math import inf as INFINITY
items=[["mouse,10,50"],["pen,20,50"],["pencil,30,30"],["sharpner,40,40"],["ruler,50,10"]]
max_price= 0
min_quant = INFINITY
for List in items:
string = List[0]
name,quant,price = st.split(',')
quant,price = int(quant),int(price)
if quant<min_quant:
min_quant = quant
if price > max_price:
max_price = price
print("max price is",max_price)
print("min quant is",min_quant)
Ответ №6:
from operator import itemgetter
items=[["mouse,10,50"],["pen,20,50"],["pencil,30,30"],["sharpner,40,40"],["ruler,50,10"]]
temp_list = []
for i in range(0,len(items)):
temp_list.append(items[i][0].split(","))
reverse_sorted_element= sorted(temp_list,key=itemgetter(2),reverse = True)
max_price = reverse_sorted_element[0][2]
sorted_element= sorted(temp_list,key=itemgetter(2))
lowest_qty = sorted_element[0][2]
print("max_price: {}".format(max_price))
print("lowest_qty: {}".format(lowest_qty))
Вывод
max_price: 50
lowest_qty: 10
Комментарии:
1. Я не думаю, что вам следует вносить изменения в поиск оригинального решения
list
.2. Ооо, я подумал, что парень, возможно, допустил ошибку. Тогда позвольте мне соответствующим образом изменить ответ.