2013-08-30 313 views
6

我需要将列表转换为整数列表。将列表转换为整数列表

来自:

L1 = [[1, 2, 3, 4], [3, 7, 1, 7], [0, 5, 6, 7], [9, 4, 5, 6]] 

到:

L2 = [1234, 3717, 0567, 9456] 

我怎样才能让蟒蛇承认从0开始的整数?像案例L2[2]

另一个问题是,我如何检查列表中的项目是否被排序?

A = [1, 2, 6, 9] ---->True 

除此之外:

A == sorted(A) 

你们快。谢谢!

回答

5

的第一个问题可以通过

L = [int("".join([str(y) for y in x])) for x in L] 

完成遗憾的是,整不以0开始有没有办法做到这一点。

检查A == sorted(A)是否是完美的方法。

+0

列表L包含整数而不是字符串。我试过你的代码。你的代码适用于字符串,但它仍然不会省略逗号。 – Ali

+0

>>> L1 = [[1,2,3,4],[3,7,1,7],[0,5,6,7],[9,4,5,6]] >> > [int(“”。join([str(y)for y in x]))for x in L1] [1234,3717,567,9456] –

+0

不需要内部括号:'“”.join str(y)for y in x)'。而且,这种情况下'map'看起来更自然:''“.join(map(str,x))''。 – FMc

4
L2 = [reduce(lambda x,y : 10 * x + y, l) for l in L1] 

如果您想要一个不通过字符串的解决方案。

1

问题1,也许Python 3次的转换,但平淡。加入给我一个TypeError在Python 2.尝试:

["".join(str(d) for d in x) for x in L] 

...为字符串表示,或

[int("".join(str(d) for d in x)) for x in L] 

(字符串表示法是保留前导零的唯一方法,除了格式化输出...然后这只是在输出文件/字符串的路上进行字符串转换。)

For questio N 2:all(A[i-1] < A[i] for i in range(1, len(A)))

>>> A = [1, 2, 6, 9] 
>>> all(A[i-1] < A[i] for i in range(1, len(A))) 
True 
+1

你可能会在连接中使用一个列表,因为它会更快(在我的机器上是2x)。 –

+0

感谢您的提示。我从来没有计时过。这是否适用于较长的序列,或者您认为这只是4元素列表中的发生器构造开销? –

+0

它可能不适用于python 3.我发现如果你使用它作为列表,它会更快。对len(输入)进行测试<= 1亿列表理​​解对发生器的速度提高了2倍。我无法测试更大,因为它花了很长时间。在Python 2中,生成器的上下文切换很慢。 –

0

你可以这样做:

L2 = [ int("1" + "".join(str(l) for l in ll1)) for ll1 in L1 ] 

保持零和得到:

[11234, 13717, 10567, 19456] 

但你需要摆脱最左边1 S的。