-1

这是我目前的清单:

x = [1.0, 0.0, 3.5, 1.2, 5.4]

这就是我想要的:

newx = [1, 0, 0, 0, 3, 5, 1, 2, 5, 4]

我只需要在小数点处拆分列表,并且不希望将任何额外的零添加到新列表中。似乎应该有一个我只是不知道的简单解决方案,因为我太新了。

4

7 回答 7

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))
于 2013-09-19T19:34:56.240 回答
3

这可以使用str.split()和来完成itertools.chain.from_iterable()

生成器表达式中,我们获取列表中的每个项目并使用str()获取数字并将其制成字符串。然后我们在字符上拆分该字符串"."

(str(item).split(".") for item in x)

这为我们提供了一个列表生成器 ( ['1', '0'], ['0', '0'], ...)。然后我们使用itertools.chain.from_iterable()将其展平为单个迭代器:

itertools.chain.from_iterable(...)

然后我们使用列表推导将各个数字字符串再次转换为整数。

>>> 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 中有清晰的文档)。

于 2013-09-19T19:33:17.330 回答
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]
于 2013-09-19T19:33:28.670 回答
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]

假设列表中的每个元素都是一个浮点数,并且有一位小数。

于 2013-09-19T19:43:14.197 回答
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]
于 2013-09-19T19:58:33.497 回答
0
[int(b) if b.isdigit() else b for a in x for b in str(a).split('.')]
于 2013-09-19T19:35:16.270 回答
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]
于 2013-09-19T19:34:16.237 回答