Ошибка синтаксиса Python – In и Not In List

Я пытаюсь построить новый список поплавков из другого существующего списка поплавков. Ожидаемое содержимое этого первого списка легче идентифицировать на примере:

price_list = [39.99, 74.99, 24.99, 49.99] 

Ожидаемая функция post:

 print new_price_list >>[29.99, 34.99, 44.99, 54.99, 59.99, 64.99, 69.99] 

Новый список выводится путем просмотра диапазона существующего списка и, начиная с минимального значения в существующем списке, добавляя float + = 5.00, которые не находятся в существующем списке. Моя первоначальная попытка решения заключалась в следующем:

 price_list = [39.99, 74.99, 24.99, 49.99] min_price = min(price_list) new_price_list = [] while min_price < max(price_list): if min_price not in price_list: new_price_list.append(min_price) min_price += 5.00 for price in new_price_list: print price >>29.99 >>34.99 >>39.99 >>44.99 >>49.99 >>54.99 >>59.99 >>64.99 >>69.99 

И только для справки:

 print new_price_list >>[29.99, 34.989999999999995, 39.989999999999995, 44.989999999999995, 49.989999999999995, 54.989999999999995, 59.989999999999995, 64.99, 69.99] 

Тем временем я определил, что, по моему мнению, проблема с тем, как min_price сравнивается с элементами в price_list. Мое неудобное решение проблемы заключается в следующем. Тем не менее, мне все еще интересно, если в любом случае для более эффективного выполнения этой задачи, как я пытался сделать в своей первоначальной догадке решение или, возможно, даже больше, используя понимание списка даже с min_price + = 5.00?

 price_list = [39.99, 74.99, 24.99, 49.99] min_price = min(price_list) new_price_list = [] while min_price < max(price_list): if int(min_price) not in [int(price) for price in price_list]: new_price_list.append(int(min_price)) min_price += 5.00 better_price_list = [price + 0.99 for price in new_price_list] print better_price_list [29.99, 34.99, 44.99, 54.99, 59.99, 64.99, 69.99] 

Большое спасибо за вашу помощь! С нетерпением ждем, когда узнаем это сообщество.

4 Solutions collect form web for “Ошибка синтаксиса Python – In и Not In List”

Чтобы сгенерировать значения, min и max и создать собственный генератор диапазона:

 mn = min(price_list) mx = max(price_list) def flt_rnge(start, stop, step): start += step while start < stop: yield start start += step print(list(flt_rnge(mn, mx, 5))) 

Что выводит следующее, которое не является синтаксической ошибкой , это результат вывода:

 [29.99, 34.989999999999995, 39.989999999999995, 44.989999999999995, 49.989999999999995, 54.989999999999995, 59.989999999999995, 64.99, 69.99] 

Если вы хотите, чтобы значение еще не было в вашем списке, вы можете использовать set для хранения цен уже в своем списке, но при сравнении поплавков вы будете сталкиваться с проблемами с плавающей точкой , в этом случае и всегда при работе с деньгами вы должны использовать десятичный модуль:

 price_list = [39.99, 74.99, 24.99, 49.99] mn = min(price_list) mx = max(price_list) from decimal import Decimal def flt_rnge(start, stop, step, l): st = map(str, l) start,stop,step = Decimal(str(start)),Decimal(str(stop)),Decimal(str(step)) start += step while start < stop: if start not in st: yield start start += step print(list(flt_rnge(mn, mx, 5, price_list))) [Decimal('29.99'), Decimal('34.99'), Decimal('44.99'), Decimal('54.99'), Decimal('59.99'), Decimal('64.99'), Decimal('69.99')] 

Вы печатаете вывод в своей первой части вопроса, чтобы вы видели хорошо отформатированный вывод, когда вы печатаете список после того, как вы видите репрез, который показывает, что сохраненное значение float фактически не равно xx.99, поэтому все ваши if x not in list .

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

Что-то вроде этого, вероятно, то, что вы хотите.

 upper_bound = max(int(p) for p in price_list) lower_bound = min(int(p) for p in price_list) new_price_list = [(p+0.99) for p in range(lower_bound, upper_bound, 5) if (p+0.99) not in price_list] 

Это другой способ добиться того, что вам нужно:

 price_list = [39.99, 74.99, 24.99, 49.99] min_price = min(price_list) max_price = max(price_list) new_price_list = [min_price + 5.00] for i in new_price_list: if i < max_price - 5.00: num = i+5.00 num = round(num,2) new_price_list.append(num) print new_price_list 

Вывод:

 [29.99, 34.99, 39.99, 44.99, 49.99, 54.99, 59.99, 64.99, 69.99] 

Действительно ли вы гарантированы, что цены будут заканчиваться на 0,99? Если нет, то ваше решение и новое предложение будут недействительными по фактическим данным.

Я предлагаю вам сначала конвертировать цены в центы:

 pennies_list = [round(100*p) for p in price_list] 

Теперь вы можете заниматься обычным делом поиска недостающих цен. Найдите значения min_price и max_price списка пенни, как показал polpak.

 full_list = [p for p in range(min_price, max_price, 500) ] original_set = set(pennies_list) full_set = set(full_list) new_set = full_set - original_set new_price_list = list(new_set) 
  • Как удалить смежные повторяющиеся элементы в списке, используя списки?
  • Понятия в Python к выборке кортежей из списка
  • Python - просмотр списка с несколькими аргументами в
  • Самый эффективный способ Python выбрать самую длинную строку в списке?
  • список вызовов функции, использующей понимание списка
  • Как удалить список слов из списка строк
  • Понимание переменных нескольких переменных
  • понимание списка python для создания двух значений на одной итерации
  • Python - лучший язык программирования в мире.