Python - 在和不在列表语法错误中
Python - In and Not In List Syntax Error
我正在尝试从另一个现有的浮动列表构建一个新的浮动列表。第一个列表的预期内容更容易通过示例识别:
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]
新列表是通过查看现有列表的范围并从现有列表中的最小值开始,附加现有列表中不存在的浮点数 += 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]
非常感谢您的帮助!期待更好地了解这个社区。
这样的东西可能就是你想要的..
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]
要生成值、最小值和最大值并创建自定义范围生成器:
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)))
输出以下不是语法错误,它是 repr 输出:
[29.99, 34.989999999999995, 39.989999999999995, 44.989999999999995, 49.989999999999995, 54.989999999999995, 59.989999999999995, 64.99, 69.99]
如果您想要的值不在您的列表中,您可以使用 set
来存储列表中已经存在的价格,但您要 运行 进入 floating-point-arithmetic-issues when comparing the floats, in that case and always when dealing with money you should use the decimal 模块:
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')]
您正在打印问题第一部分的输出,因此您看到格式正确的输出,当您在看到显示存储的浮点值实际上不等于 xx.99 的 repr 后打印列表时所以你所有的 if x not in list
.
在处理金钱的时候,你应该从一开始就使用 decimal 模块。
你们真的保证价格都以 .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)
这是实现您需要的另一种方法:
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]
我正在尝试从另一个现有的浮动列表构建一个新的浮动列表。第一个列表的预期内容更容易通过示例识别:
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]
新列表是通过查看现有列表的范围并从现有列表中的最小值开始,附加现有列表中不存在的浮点数 += 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]
非常感谢您的帮助!期待更好地了解这个社区。
这样的东西可能就是你想要的..
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]
要生成值、最小值和最大值并创建自定义范围生成器:
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)))
输出以下不是语法错误,它是 repr 输出:
[29.99, 34.989999999999995, 39.989999999999995, 44.989999999999995, 49.989999999999995, 54.989999999999995, 59.989999999999995, 64.99, 69.99]
如果您想要的值不在您的列表中,您可以使用 set
来存储列表中已经存在的价格,但您要 运行 进入 floating-point-arithmetic-issues when comparing the floats, in that case and always when dealing with money you should use the decimal 模块:
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')]
您正在打印问题第一部分的输出,因此您看到格式正确的输出,当您在看到显示存储的浮点值实际上不等于 xx.99 的 repr 后打印列表时所以你所有的 if x not in list
.
在处理金钱的时候,你应该从一开始就使用 decimal 模块。
你们真的保证价格都以 .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)
这是实现您需要的另一种方法:
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]