【发布时间】:2016-01-08 16:07:10
【问题描述】:
在 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]]
【问题讨论】:
在 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]]
【问题讨论】:
对于以下解决方案,我将添加免责声明:“不要在家做”...
lst = [18, 8]
map(int, sum(map(lambda x: list(str(x)), lst), [])) #[1, 8, 8]
解释:str(x)将每个整数转换为字符串,然后使用list内置函数将字符串分隔为字符列表(每个字符都是一个位)。
sum(..., []) 将列表展平,最后一个 map(int, ...) 将每个“字符串数字”转换回整数。
【讨论】:
您可以将所有整数连接成一个字符串,然后将字符串中的每个数字/字符映射到一个整数:
list1 = [18, 8]
print(list(map(int,"".join(map(str, list1)))))
[1, 8, 8]
或者在每个 int 上使用一个 list comp 调用 str 并遍历每个 char:
list1 = [18, 8]
print([int(ch) for i in list1 for ch in str(i)])
[1, 8, 8]
【讨论】:
list 是多余的。
list(map..,除非问题是专门为python2标记的
这是我尝试过的最密集的形式 内部循环将列表转换为字符串,然后使用 itertools.chain 将字符串展平为字符,最后将其转换回整数
import itertools
list2 = [int(y) for y in list(itertools.chain(*[str(x) for x in list1]))]
【讨论】:
#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]
【讨论】:
这个怎么样?
intlist = [18, 8]
digitlist = [int(digit) for number in intlist for digit in str(number)]
print digitlist
这会将列表中的每个数字转换为字符串,然后将字符串中的每个字符转换回 int。通过在列表推导中使用双 for (for a in b for x in y),intlist 中的每个字符只输出一个列表项。
【讨论】: