如果我有一个整数列表,请说:
[['12' '-4' '66' '0'], ['23' '4' '-5' '0'], ['23' '77' '89' '-1' '0' ]]
我想将数字转换为它们的绝对值,然后转换为单个数字,因此输出将是:
1246602345023778910
您显示的是(可能)一个字符串列表列表,并且语法非常奇特——子列表以普通的逗号显示,但在每个子列表中只有文字字符串,它们之间有空格。如果你真的把它输入到 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)
也可以(并且更符合您的要求),但第一个想法更好。
您可以在此处使用 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('-','') )
编辑:我以前错过了 abs 要求。
第二次编辑:使用的替换可能比 str(abs(int(n))) 更有效,而且也不那么笨拙(礼貌:亚历克斯的回答)
您在上面给出的是字符串列表的列表。
我建议采用两遍方法:
从字符串中获取整数并取其绝对值:
[ 列表中的 s 的 abs(int(s)) ]
将这些数字组合成一个字符串,然后变成一个整数
''.join([ ''.join(x) for x in listoflists ])
当你结合这两种方法时,你会得到:
>>> 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
我是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)
正如其他答案中指出的那样,您的内部列表并不像它们看起来那样“列表”。由于缺少逗号,Python 将(我认为)将它们全部连接成一个字符串,从而为您提供一个项目列表。这将与此相同:
[['12-4660'], ['234-50'], ['237789-10']]
在任何情况下,你都可以去掉所有不是数字的东西来得到你的结果(这在有或没有逗号的情况下都可以):
''.join(x for x in str(mylist) if x.isdigit())