关于python:列表从字符串到整数的理解改变输出

List Comprehension from String to Integer Changes Output

我正在处理项目Euler问题8,因此请避免在您的答案中走得太远。

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

1
2
3
4
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位数字时,会发生什么?这在整个过程中会发生多次,但下面第一个简单的例子是:

1
5593572972, 5716362695618, 8267042825248, 3600823257530, 420752963450

如果我删除int并返回一个字符串列表,它们的长度都是正确的13位数字,但是我不能将它们转换回int,并且会不断地收到一条"invalid literal for int()with base 10"消息。

1
2
3
4
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)

返回:

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

如何使这些数字组在某个位置相乘,然后进行比较?事先谢谢。


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

为了清晰起见,

1
print(int('0084646'))

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

1
2
3
4
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()转换是否对您有帮助。

为了打印目的,请在此处和此处使用参考。

我建议您使用pandasnumpy,而不是core python。

将整数列表相加-正态与numpy

整数乘法列表-正态与numpy