这是我目前的清单:
x = [1.0, 0.0, 3.5, 1.2, 5.4]
这就是我想要的:
newx = [1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
我只需要在小数点拆分列表,并且不希望在新列表中添加任何额外的零。似乎应该有一个我不知道的简单解决方案,因为我很新。
答案 0 :(得分:3)
可以使用str.split()
和itertools.chain.from_iterable()
完成此操作。
在generator expression中,我们会获取列表中的每个项目,并使用str()
获取该数字并将其转换为字符串。然后我们将该字符串拆分为字符"."
:
(str(item).split(".") for item in x)
这为我们提供了一个列表生成器(['1', '0'], ['0', '0'], ...
)。然后我们使用itertools.chain.from_iterable()
将其展平为单个迭代器:
itertools.chain.from_iterable(...)
然后我们使用list comprehension将各个数字字符串再次转换为整数。
>>> import itertools
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> digit_strings = itertools.chain.from_iterable(str(item).split(".") for item in x)
>>> [int(item) for item in digit_strings]
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
itertools.chain.from_iterable()
是展平迭代的最佳工具 - 它高效灵活,语法清晰(只是在stdlib中有明确文档的函数调用)。
答案 1 :(得分:3)
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> y = [str(v).split(".") for v in x] # Will give list of list
>>> [int(v) for li in y for v in li] # Flatten the list
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
答案 2 :(得分:3)
x = [1.0, 0.0, 3.5, 1.2, 5.4]
newx = [int(j) for i in x for j in str(i).split('.')]
>>>[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
顺便说一句,理解与此一样:
var result = []
for i in x:
for j in str(i).split('.'):
result.append(int(j))
答案 3 :(得分:0)
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> map(int, (k for y in map(str, x) for k in y.split('.')))
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
答案 4 :(得分:0)
[int(b) if b.isdigit() else b for a in x for b in str(a).split('.')]
答案 5 :(得分:0)
它看起来有点神秘,但应该是OP想要的:
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> map(int, ('.'.join(str(y) for y in x).split('.')))
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
假设列表中的每个元素都是一个浮点数,并带有一个小数。
答案 6 :(得分:0)
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> a = []
>>> [a.extend(map(int, str(num).split("."))) for num in x]
[None, None, None, None, None]
>>> a
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]