【问题标题】:number string to list of numbers conversion数字字符串到数字列表的转换
【发布时间】:2014-08-26 17:38:16
【问题描述】:

我有一个字符串

a = 2,00,02

这个字符串的每个元素都有数据类型str

我想将其转换为 a = [2, 00, 02] 之类的列表,因此 alist 并且 a 的每个元素都应具有数据类型 int

我所做的是a = [int(each) for each in a],它给了我a = [2,0,2],其中a 是一个列表,a 中的每个都是一个整数。 但这不是我想要做的。我想要a = [2, 00, 02],其中中间的0 应该是00,最后一个02 应该是02,而不是0 和2。 我该怎么做?

【问题讨论】:

  • 如果你希望它们中的每一个都是int,那么你不能期望'00'int中存储为00
  • 您能重新表述一下您的需求吗? 02 == 2。这只是输出格式的问题。默认情况下,Python 不显示前导零。正在寻找"{:02d}".format(...) 吗?
  • 如果想要listint 类型的数据,那么你不能有0002 顺便说一句。
  • @Sylvain 是的。我一直在寻找用 2 位数字表示它的方法。
  • 你需要重写这个问题,这样才有意义。你不可能有一个字符串a = 2,00,02,因为那不是一个字符串;这是 Python 2.x 中的 3 个整数的元组,而 Python 3.x 中的语法错误。此外,字符串的每个元素都是一个单字符字符串。那么,您实际上拥有什么?是 'a = '2,00,02'? Or a=('2', '00', '02')`?还是完全不同的东西?

标签: python string list int type-conversion


【解决方案1】:

000 是同一个号码。

In [59]: 00 == 0
Out[59]: True

但 Python 将始终将此数字表示为 0,而不是 00。如果要保留00,则必须使用字符串:

In [56]: a = '2,00,02'

In [57]: a.split(',')
Out[57]: ['2', '00', '02']

如果您想将a 转换为ints 列表,同时保留前导零,那么您需要跟踪两个列表:

In [65]: astr = a.split(',')

In [66]: astr
Out[66]: ['2', '00', '02']

In [67]: aint = map(int, astr)

In [68]: aint
Out[68]: [2, 0, 2]

In [69]: zip(astr, aint)
Out[69]: [('2', 2), ('00', 0), ('02', 2)]

使用aint 进行数值计算,使用astr 进行字符串格式化/输出。


请注意,Python 中的前导 0 用于表示八进制数:

In [62]: 011
Out[62]: 9

因为 11 基数 8 是 9。

所以如果字符串是a = '2,011,02',那么你需要澄清你是否想要整数值[2,11,2][2,011,02] 等于[2,9,2]

In [70]: [2, 011, 02] == [2, 9, 2]
Out[70]: True

如果你的字符串是a = '2,09,02',那么如果你将每个数字字符串转换为一个int,你会得到[2, 9, 2],但如果你想要[2, 09, 02],那么你会得到一个SyntaxError,因为09不是有效的八进制数。

【讨论】:

  • 他想要列表中的 int 而不是 string 听起来这是不可能的。
  • 整数不使用前导零保存,对于字符串表示,请看这里:stackoverflow.com/a/3371180/3216660
  • OP 没有说这是 Python 2 还是 Python 3;在 Python 3 中,前导 0 不再代表八进制数;它们是语法错误。 (要在 2.x 和 3.x 中表示八进制数,请使用 0o11。)
  • 同时,将 '09' 等字符串转换为十进制整数(在 2.x 和 3.x 中)的方法是使用显式基数调用 int[int(x, 10) for x in astr]。跨度>
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多