在列表中拆分整数(Python)

4
在Python中,如何将类似于[18, 8]的列表转换为[1, 8, 8]?我已经尝试过使用以下代码:
list1 = [18, 8] 
list2 = [list1[i : i + 1] for i in range(0, len(times_two_even_even_indexes))]

但这只是给我

list2 = [18], [8]]
5个回答

1

针对以下解决方案,我会添加免责声明:“请勿在家中尝试”…

lst = [18, 8]
map(int, sum(map(lambda x: list(str(x)), lst), [])) #[1, 8, 8]
说明:
str(x)将每个整数转换为字符串,然后使用list内置函数将字符串分成字符列表(每个字符都是一个数字)。

sum(..., [])将列表扁平化,最后的map(int, ...)将每个“字符串数字”转换回整数。


1
你可以将所有的整数连接成一个字符串,然后将字符串中的每个数字/字符映射为一个整数:
list1 = [18, 8]

print(list(map(int,"".join(map(str, list1)))))
[1, 8, 8]

或者使用一个列表推导式,对每个整数调用 str 并迭代每个字符:

 list1 = [18, 8]

print([int(ch) for i in list1 for ch in str(i)])
[1, 8, 8]

不错!在第一个解决方案中,包装“list”的操作是多余的。 - Nir Alfasi
2
@alfasin,如果使用Python3,你需要在map函数上调用list。 - Padraic Cunningham
1
@alfasin,我通常总是使用list(map..,除非问题专门标记为Python2。 - Padraic Cunningham
1
我完全同意:防御性编程 :) - Nir Alfasi

1

这是我尝试过的最密集的形式 内部循环将列表转换为字符串,然后使用itertools.chain将字符串展平为字符,最后将其转换回整数

import itertools
list2 = [int(y) for y in list(itertools.chain(*[str(x) for x in list1]))]

0

这个怎么样?

intlist = [18, 8]
digitlist = [int(digit) for number in intlist for digit in str(number)]
print digitlist

这将列表中的每个数字转换为字符串,然后将字符串中的每个字符再转换回整数。通过在列表推导式中使用双重循环(for a in b for x in y),对于 intlist 中的每个字符,只输出一个列表项。


0
#since string is iterable convert to string,
#chain it, and convert back to int

from itertools import  chain

print(list(map(int,chain.from_iterable(map(str,[18, 8])))))

[1, 8, 8]

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