如何对整数字符串使用 eval() 函数?

问题描述 投票:0回答:3

用一串整数:

myStr = '3848202160702781329 2256714569201620911 1074847147244043342'

如何在保持字符串数据类型的同时对字符串整数求平均值? 这是我在伪代码中的想法:

sum = 0
res = eval(myStr[i] + ' + sum') 
avg = res/len(myStr)
python string eval
3个回答
10
投票

如果您想获得该字符串中这些整数的平均值,这是一种方法:

myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
print(sum(lst := [int(x) for x in myStr.split()]) / len(lst))

基本上,您可以获得该字符串中的整数列表的总和,并使用该运算符(忘记名称)将该列表分配给变量,同时返回该值,然后只需将总和除以该变量的长度即可列表

EDIT1, 2, 3:刚想起来,它叫

walrus operator
,一些信息可以在这里(Lex Fridman的视频)这里以及其他地方找到,也需要Python版本3.8或更高

EDITn:使用海象运算符背后的原因是它允许在这一行中不重复代码,否则列表理解将被使用两次(在

sum
len
中),这可能会影响性能对于非常大的列表(我希望它是一行)


3
投票

您可以拆分字符串,并将其映射为整数,然后找到列表的总和。最后将总和除以分割列表的长度。

myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
print(sum(map(int,myStr.split()))/len(myStr.split()))

输出

2.3932546257161487e+18

2
投票

由于(绝对有效)其他答案显示了单行解决方案,我想展示不同的步骤。这可能有助于了解发生了什么。

>>> myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
>>> data = myStr.split()
>>> data
['3848202160702781329', '2256714569201620911', '1074847147244043342']
>>> data = list(map(int, data))
>>> data
[3848202160702781329, 2256714569201620911, 1074847147244043342]
>>> sum(data)
7179763877148445582
>>> sum(data) / len(data)
2.3932546257161487e+18
© www.soinside.com 2019 - 2024. All rights reserved.