将列表中的列表转换为整数列表。

7
我需要将一个列表的列表转换为一个整数列表。
来自:
L1 = [[1, 2, 3, 4], [3, 7, 1, 7], [0, 5, 6, 7], [9, 4, 5, 6]]

to:

L2 = [1234, 3717, 0567, 9456]

如何使Python识别以0开头的整数?比如L2[2]这种情况。
另一个问题是,如何检查列表中的项是否有序?
A = [1, 2, 6, 9] ---->True

除此之外:
A == sorted(A)

你们真快。谢谢!
4个回答

5

第一个问题可以通过

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

遗憾的是,整数不能以0开头,无法实现这一点。

检查A == sorted(A) 是解决这个问题非常好的方法。


列表L包含整数而非字符串。我尝试了你的代码。你的代码对于字符串是有效的,但它仍然没有省略逗号。 - Ali
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]
- Matt Bryant
不需要内部括号:"".join(str(y) for y in x)。此外,这是一个适合使用"map"的情况:"".join(map(str, x))。 - FMc
1
内部括号有其存在的理由:它运行速度是慢生成器不需要使用的两倍。我同意map更适合,但显然不应再使用:/ - Matt Bryant

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

如果您需要一种不通过字符串来解决问题的方案。

1

对于第一个问题,或许在Python 3中可以转换,但使用普通的.join()会在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]

(字符串表示是保留前导零的唯一方式,除非使用格式化输出...然后这只是在输出文件/字符串之前进行的字符串转换。)
对于问题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
你最好在连接中使用列表,因为它会更快(在我的机器上快2倍)。 - Matt Bryant
谢谢您的提示。我之前从来没有计时过。这是否适用于更长的序列?或者您认为这只是在4个元素列表上产生的构造开销? - Mike Housky
这可能不适用于Python 3。我发现如果你将其用作列表,它会更快。在len(inputs) <= 1亿的测试中,列表推导比生成器保持了2倍的速度提升。由于时间太长,我无法测试更大的数据。在Python 2中,生成器的上下文切换速度较慢。 - Matt Bryant

0

你可以做:

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

保留零并获取:

[11234, 13717, 10567, 19456]

但是你需要摆脱最左边的1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接