(Python) 在字符串中添加负数
Posted
技术标签:
【中文标题】(Python) 在字符串中添加负数【英文标题】:(Python) Adding Negative Numbers within a String 【发布时间】:2020-08-22 07:38:22 【问题描述】:我为自己在学习 Python 时不必问任何问题而感到非常自豪。 但是,我似乎无法弄清楚这一点。
我正在尝试附加从 json.dump 获取的数据,保留它直到满足循环,然后添加所有附加的数字。
下面是我的一段代码(你可以取笑我,我敢肯定这很可怕)。 目的是:如果文本等于响应文本,则解析json字典并输入一个级别。一旦进入“orderFillTransaction”级别,取“pl”的值并追加。
if 'orderFillTransaction' in json_data:
print("Json_Data:", type(json_data))
Closed_ID2 = json_data['orderFillTransaction']
PL_List = (Closed_ID2['pl'])
print("PL_List:", PL_List, type(PL_List))
PL.append(PL_List)
print("PL.append:", PL, type(PL))
下面是输出:
Json_Data: <class 'dict'>
PL_List: -0.1300 <class 'str'>
PL.append: ['-0.1300', '-0.1300'] <class 'list'>
问题是,如果我尝试 sum(),它会出错,如果我 float(),我会得到一些奇怪的数字;我似乎无法弄清楚如何将每个项目添加在一起。 如果重要的话,这些数字通常是负数。
我经常会得到以下错误:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
或
ValueError: invalid literal for int () with base 10
我知道它与列表中的 str 而不是 int 有关,但是,我知道必须有一些解决方案。
任何方向将不胜感激。 谢谢!
【问题讨论】:
你试过eval()
sum([eval(num) for num in PL])
你在使用float()
时有什么尝试,你得到了哪些“奇怪”的数字?
这个问题与 json 无关(我认为)
【参考方案1】:
试试:
>>> PL = ['-0.1300', '-0.1300']
>>> print(sum([float(i) for i in PL]))
输出:
-0.26
我不知道你使用float
得到了哪些“奇怪”的数字,但上面的代码对我有用。
【讨论】:
谢谢!使用上面的代码弹出无法添加 str 错误。尽管使用 sum([eval(num) for num in PL]),但我确实让它工作了。如果我没记错的话,浮点问题就是之前的问题。【参考方案2】:如果换行
PL.append(PL_List)
到
PL.append(float(PL_List))
(假设 PL 为空,或者一开始就包含其他整数/浮点数),那么您应该能够简单地求和(PL)。
您引用的类型错误表明在某些时候尝试将数字添加到字符串中。在列表追加之前/期间将每个数字转换为浮点数应该可以解决该问题。
第二个错误可以通过使用 float() 而不是 int() 来避免。详情请见this link。
最后,你提到的那些奇怪的数字听起来好像是 python 对浮点数表示的结果。
例如:
>>> numbers = [float(0.67), float(1.23), int(5), float("-1.2345")]
>>> print(numbers)
[0.67, 1.23, 5, -1.2345]
>>> sum(numbers)
5.665500000000001
浮点小数精度有很好的解释here
【讨论】:
【参考方案3】:这似乎是您遇到的浮点问题。这是因为浮点数不能准确地存储在计算机上——我们需要存储它的一些近似值。你可以通过here了解更多。
可能的解决方法:您可以创建一个函数来查找 PL 数组的总和,该函数对总和进行一些后舍入,这样它就不会看起来像一团糟,但是,请确保它不会影响任何进一步的计算。
def sum_str_array(array):
total = 0
for item in array:
total += float(item)
return round(total, 5) #rounded to 5 digits precision after summing all the elements
a = ['1.01', '-0.99', '-0.02']
print (sum_str_array(a))
四舍五入后这将为您提供 0.0 作为答案,否则为 1.734723475976807e-17。希望这会有所帮助。
【讨论】:
以上是关于(Python) 在字符串中添加负数的主要内容,如果未能解决你的问题,请参考以下文章