Python 剥离'$'-从销售清单上签字

Python 剥离'$'-从销售清单上签字,python,list,strip,Python,List,Strip,为什么我不能在第一种代码方法中去掉“$”而在第二种方法中却能去掉 方法1 sales = ['$1.21', '$7.29', '$12.52', '$5.13', '$20.39', '$30.82', '$1.85', '$17.98', '$17.41', '$28.59'] for element in sales: element.strip('$') print(element) 方法2 sales = ['$1.21', '$7.29', '$12.52', '$5.13

为什么我不能在第一种代码方法中去掉“$”而在第二种方法中却能去掉

方法1

sales = ['$1.21', '$7.29', '$12.52', '$5.13', '$20.39', '$30.82', '$1.85', '$17.98', '$17.41', '$28.59']

for element in sales:
 element.strip('$')

 print(element)
方法2

sales = ['$1.21', '$7.29', '$12.52', '$5.13', '$20.39', '$30.82', '$1.85', '$17.98', '$17.41', '$28.59']

for element in sales:

 print(element.strip('$'))

如果要更改原始列表,需要在for循环中指定变量并使用索引:

sales=['1.21美元','7.29美元','12.52美元','5.13美元','20.39美元','30.82美元','1.85美元','17.98美元','17.41美元','28.59美元']
对于范围内的x(len(销售)):
销售额[x]=销售额[x]。条带(“$”)
打印(销售[x])

您似乎希望将销售视为一个数字变量

sales = ['$1.21', '$7.29', '$12.52', '$5.13', '$20.39', '$30.82', '$1.85', '$17.98', '$17.41', '$28.59']


sales = [float(element.strip('$')) for element in sales]
然后你可以把它打印出来或者求和

print("total sales: {t:.2f}".format(t=sum(sales)))
方法不会修改给定的字符串,而是返回正式文档中指定的结果

返回包含前导字符和尾随字符的字符串副本 删除

由于
element.strip(“$”)
返回结果,而不是修改
element
此代码不起任何作用。

若要将其转换为美分(切勿使用浮动货币,因为浮动货币不精确,您可以执行以下操作:

sales_in_cents =  [int(element.strip('$').replace('.','')) for element in sales]
要以美元显示总额

print(f'Total sales : {sum(sales_in_cents)/100:0.2f}'

用美分进行所有计算(包括总和),并转换为$(仅在需要时除以100)。

在第一个计算中,您忽略
strip
的返回值。因为您没有存储
元素.strip(“$”)的返回值
anywhere。在第二种情况下,您只看到条带的结果,但条带未应用于列表中的元素
sales
。如果您希望通过删除
$
符号来修改列表sales,则必须使用修改后的元素创建一个新列表。
sales=[i.lstrip('$')for i In sales]
销售[:]=(i.lstrip(“$”)表示销售中的i)
如果格式正确,第二种方法应该有效。使用浮点数进行货币计算充满了危险。-例如,在大多数语言中,
0.1+0.1+0.1!=0.3
由于浮点数不精确。最好尽快将它们转换为美分。sales=[element.strip('$)for element in sales]python可能会在总和的末尾加上.000000123,所以格式化输出会很好;)或者使用
Decimal
@TonySuffolk66,注意事项-更新我的答案以考虑浮点precision@OlvinRoght这将发生,因为在Python和大多数其他语言中,浮点是imprecise@UriGoren不是真的-即使是fsum也无法回避浮点数不能准确存储0.1、0.2、0.3等的事实,并且仍然会得到舍入e错误