Python:绝对值到单个数字的整数列表

时间:2009-12-16 15:25:36

标签: python list mapping integer absolute

如果我有一个整数列表说:

  

[['12''-4''66''0'],['23''4''-5'   '0'],['23''77''89''-1''0']]

我想将数字转换为绝对值,然后转换为单个数字,因此输出为:

  

1246602345023778910

5 个答案:

答案 0 :(得分:2)

你所展示的是(可能)一个字符串列表列表,并且语法非常奇特 - 子列表用普通的常用逗号显示,但每个内部只有文字字符串,它们之间有空格。如果您实际将其键入Python,您将获得一个列表,其中每个子列表包含一个字符串 - Python,如C,在编译时连接字符串文字,它们与中间的空格并列。

假设你的确意味着每个都有几个字符串的子列表,用适当的逗号,你提到的“数字列表”(这不是你拥有的 - 你有字符串列表! - )只是小事故,像:

''.join(c for L in thelist for c in L).replace('-', '')

可能是最好的 - 只需在字符串级别操作(因此,用任何内容替换破折号,而不是使用abs),因为无论如何你都需要字符串用于连接/连接目的。

如果你渴望以最复杂的方式去做,

''.join(str(abs(int(c))) for L in thelist for c in L)

也会起作用(并且更符合您的要求),但第一个想法更好。

答案 1 :(得分:1)

上面给出的是一系列字符串列表。

我建议采用双程方法:

  1. 从字符串中获取整数并取其绝对值:

    列表中s的[abs(int(s))

  2. 将这些数字合并为一个字符串并将其转换为整数

    ''。join([''.join(x)for listoflists中的x])

  3. 当你将这两种方法结合起来时,你会得到:

    >>> listoflists = [['12','-4','66','0'],['23','4','-5','0'],['23','77','89','-1','0']]
    >>> int(''.join([ ''.join([ str(abs(int(s))) for s in list ]) for list in listoflists ]))
    1246602345023778910L
    

    虽然它并不好看和可读,所以你可能希望保持它的分歧,使那些可能会痛苦地理解它的人更有意义。

    注意:如果你确实有一个整数列表,正如你所说,那就更容易了:

    >>> listofints = [12,-4,66,0,23,4,-5,0,23,77,89,-1,0]
    >>> int(''.join( [ str(abs(x)) for x in listofints ]))
    1246602345023778910L
    

答案 2 :(得分:1)

你可以在这里使用itertools.chain来摆脱嵌套,连接数字串,删除' - '符号然后将它们变成一个数字。

import itertools
mylist = [['12' '-4' '66' '0'], ['23' '4' '-5' '0'], ['23' '77' '89' '-1' '0']]
num = int( ''.join(itertools.chain(*mylist)).replace('-','') )

编辑:我以前错过了绝对要求 第二次编辑:使用替换,它可能比str(abs(int(n))更有效,也不那么笨拙(礼貌:Alex的回答)

答案 3 :(得分:0)

我是Python的新手,所以如果有更有效的方式,请原谅我:)

#!/usr/bin/python

str = ''
lists = [['12' '-4' '66' '0'], ['23' '4' '-5' '0'], ['23' '77' '89' '-1' '0']]

for list in lists:
  str += list[0].replace('-', '')

print int(str)

答案 4 :(得分:0)

正如其他答案中所指出的那样,你的内部列表并不像它们出现的那样“清晰”。由于缺少逗号,Python(我认为)会将它们连接成一个字符串,从而为您提供一个项目的列表。这与此相同:

[['12-4660'], ['234-50'], ['237789-10']]

在任何情况下,你可以删除不是数字的eveything来获得你的结果(这可以使用或不使用逗号):

''.join(x for x in str(mylist) if x.isdigit())