Python不会将long转换为int

时间:2018-02-09 11:49:33

标签: python python-2.7 int long-integer

我有一个连接两个字符串的列表,然后将它们转换为整数:

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

列表如下所示:

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

列表由longs

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

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

>>> 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,而不是使用字符串方法(将long转换为字符串,删除每个字符串末尾的最后一个字符,然后再将其转换回整数)。

对我来说,充分的解决方案也是模仿csv写作功能在写作时删除'L''。

3 个答案:

答案 0 :(得分:3)

L是Python表示值的一部分,向您显示它是long()。实际数字是......好,实际数字。所以没有真正的“后缀”来修剪。

int()如果值太长而无法放入long(),则仍会返回int() - 但您可以使用str()来获取数字中的数字便于输入CSV文件的表格。

事实上,Python csv模块(不出所料)已经做了类似的事情,所以我并不完全确定你需要这个用于你陈述的场景。

答案 1 :(得分:0)

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'>
>>> 

所以:

import struct

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

另一种方式:

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

答案 2 :(得分:0)

基本上,任何暗示在第32位中有值的位操作都比较长。 "<>"&report!$M$1:$P$1,因为那里的1是正数,所以您将其移了过来。同样,如果将值设置为大于1 ^ 31的值,它将变长。如果对超出范围的值执行int运算,它将保持很长时间。这对于老式的位操纵器来说是个烦人,他们知道有32位需要摆弄,将这些相关的32位推入寄存器的大小。

如果您只是通过非1 << 31 becomes a long.-的任何方式填充第32位,Python就会拒绝使您的数字为负。因此,您需要剥离第32位,以不触发长时间转换的操作将其强制为负。

~

这将使可以表示为32位负整数的long表示为