Python不会将long转换为int

Python does not convert long to int

我有一个列表,通过连接两个字符串,然后通过以下方式将它们转换为整数:

1
2
for i in xrange(0, len(FromBus[1][0])):
    FromBus[1][0][i] = int(str(FromBus[1][0][i]) + str(ToBus[1][0][i]))

列表如下:

1
2
>>> FromBus[1][0][1:5]
[3724637724L, 3724837324L, 3724837707L, 3724837707L]

清单是由长的

1
2
>>> type(FromBus[1][0][1])
<type 'long'>

由于在不同环境中对数据进行后处理,我试图将长类型转换为整数类型,因此需要在每个变量的末尾删除"l"。但是,我发现的所有方法都失败了:

1
2
3
4
5
6
7
8
>>> int(FromBus[1][0][1])
3724637724L

>>> [int(i) for i in FromBus[1][0]][1:5]
[3724637724L, 3724837324L, 37248377071L, 37248377072L]

>>> map(int, FromBus[1][0][1:5])
[3724637724L, 3724837324L, 37248377071L, 37248377072L]

我的问题是,问题的根源是什么?我可以很容易地把它们转换成字符串。但是,我如何仍然可以将long转换为int,而不必使用through string方法(将long转换为字符串,删除每个字符串末尾的最后一个字符,然后再将其转换回integer)。

对于我来说,足够的解决方案是,在编写的时候,将csv的编写函数修改为删除l。


L是python值表示的一部分,向您展示它是一个long()。实际数字是…嗯,实际数字。所以没有真正需要删掉的"后缀"。

如果值太长而无法放入int()中,int()仍将返回long(),但您可以使用str()以便于放入csv文件的形式获取数字。

事实上,python csv模块(毫不奇怪)已经做了类似的事情,所以我不完全确定您在所述场景中是否需要这样做。


1
2
3
4
5
6
7
8
9
10
11
12
Python 2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type"copyright","credits" or"license()" for more information.
>>> x = int
>>> x
<type 'int'>
>>> x = long
>>> x
<type 'long'>
>>> print x
<type 'long'>
>>>

所以:

1
2
3
import struct

my_val, = struct.unpack('>d', my_string_part_if shorter_than_4Bytes_fill_\x00))

另一种方式:

1
2
3
4
5
>>> import binascii
>>> print int(binascii.hexlify("test"),16)
1952805748
>>>
**#be carefull always length 4 bytes**