从字符串到整数的列表理解会更改输出

时间:2018-08-13 05:00:40

标签: python string list type-conversion int

我正在研究Euler问题8,所以请避免回答得太远。

代码中的问题是什么,当我添加int转换时,输出更改,某些组不再是13位数字。这种情况在整个过程中会发生多次,但很容易发现,排在倒数第五。

def large_product(n):
    string_n = str(n)
    n = [int(str_n[i:i+13]) for i in range(0, len(str_n), 13)]
    print(n)

当我添加导致输出更改的int转换并且某些组不再是13位数字时,会发生什么情况?整个过程会多次发生,但是下面第一个很容易发现:

5593572972, 5716362695618, 8267042825248, 3600823257530, 420752963450

如果我删除了int并返回了一个字符串列表,它们的长度都是正确的13位数字,但是我无法转换回int,并且将不断被“无效的int()的立即数作为基数10命中” “消息。

n = [(str_n[i:i+13]) for i in range(0, len(str_n), 13)]
str_n = str(n)
int_n = int(str_n)
print(int_n)

返回:

ValueError: invalid literal for int() with base 10: "['7316717653133', '0624919225119', '6744265747423', '5534919493496', '9835203127745', '0632623957831', '8016984801869', '4788518438586', '1560789112949', '4954595017379', '5833195285320', '8805511125

如何将这些数字组放在相乘的位置然后进行比较?预先感谢。

1 个答案:

答案 0 :(得分:4)

问题似乎出在前缀为0的数字上。当您将字符串转换为前缀为0的整数时,int转换将忽略零,并输出整数。

为清楚起见,尝试

print(int('0084646'))

下面的块中的错误是您试图将列表转换为int。

n = [(str_n[i:i+13]) for i in range(0, len(str_n), 13)] # a list is getting generated
str_n = str(n) # "['7316717653133', '0624919225119', '6744265747423', '5534919493496', '9835203127745', '0632623957831', '8016984801869'..] -- '[' and ',' are special characters here
int_n = int(str_n) #converting list to int which will fail actually as special characters are there in string
print(int_n)

由于我不确定您打算做什么,因此我不确定int()转换是否会帮助您。

出于打印目的,请使用参考文献herehere

我建议您使用pandasnumpy而不是核心python。

添加整数列表-normalnumpy

整数列表-normalnumpy