【问题标题】:How to split a float number string into two lists?如何将浮点数字符串拆分为两个列表?
【发布时间】:2016-01-15 17:07:14
【问题描述】:

我有字符串'1234.12',我想把它分成两个列表:[1234][12]

我知道的唯一方法是使用.split() 将整个字符串变成一个列表,理解为:[n.split() for n in '1234.12'],这给了我:

[['1'], ['2'], ['3'], ['4'], ['.'], ['1'], ['2']]

【问题讨论】:

    标签: python list python-3.x split


    【解决方案1】:
    s = '1234.12'
    
    a,b = ([int(x)]  for x in s.split(".",1))
    
    print(a,b)
    

    或者只是分两部分进行,映射到 int 并在之后包装在列表中:

    s = '1234.12'
    
    a, b = map(int,s.split(".", 1))
    
    a,b = [a],[b]
    

    这将给你两个数字转换为 int 并包装在列表中:

    a -> [1234]
    b ->  [12]
    

    【讨论】:

    • 谢谢。请问一下split函数里面的1有什么用?
    • @wa7d,我们只有一个.,所以当我们找到第一个时没有意义,这只是意味着一旦你找到并不再寻找,基本上就分裂第一个
    • 为什么python会忽略前导零?我尝试了一个带有前导零的数字,它打印了零之后的所有内容
    • @wa7d,前导 0 在 python2 中表示八进制,在 python3 中表示无效语法
    【解决方案2】:

    你可以用点分割字符串,n使用map函数将结果转换为列表:

    >>> map(list,s.split('.'))
    [['1', '2', '3', '4'], ['1', '2']]
    

    而你希望得到int 的结果,你可以在map 中使用int 函数:

    >>> map(int,s.split('.'))
    [1234, 12]
    

    请注意,在这种情况下,您可以通过简单的索引来访问数字,而无需将每个数字都放在一个列表中。

    【讨论】:

    • OP 想要 [1234] [12] 而不是 [['1', '2', '3', '4'], ['1', '2']]
    • @PadraicCunningham 是的,但由于问题有点模糊,我建议采用 2 种方式。
    • 大声笑没有一个是正确的方法,问题很清楚,他们想要我的答案;)
    • @PadraicCunningham 是的 ;-) 我知道,但我认为当他可以通过索引访问它们时,没有必要将数字放入列表中。无论如何,将数字放入列表中将是一件容易的事;-)。
    • 除非你需要列表中的数字;)
    【解决方案3】:

    解释为什么您尝试的方法不起作用,

    n.split() for n in '1234.12'
    

    实际上等价于

    for n in '1234.12':
        n.split()
    

    当你像这样迭代一个字符串时,你最终会得到单个字符,所以我们也可以说这相当于:

    for n in ('1', '2', '3', '4', '.', '1', '2'):
        n.split()
    

    因此,由于 split 一次只被赋予一个字符,因此它不起作用。您想将拆分移动到字符串本身:

    n for n in '1234.12'.split()
    

    此时你不再需要理解了。

    '1234.12'.split()
    

    最后一段在其他地方解释过...split,默认情况下,在空白处拆分,所以告诉它在句点上拆分:

    '1234.12'.split('.')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2019-02-02
      • 2017-10-07
      • 2020-01-19
      • 2013-01-22
      相关资源
      最近更新 更多