Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中用十进制分隔列表_Python - Fatal编程技术网

Python中用十进制分隔列表

Python中用十进制分隔列表,python,Python,以下是我目前的名单: x = [1.0, 0.0, 3.5, 1.2, 5.4] 这就是我想要的: newx = [1, 0, 0, 0, 3, 5, 1, 2, 5, 4] 我只需要在小数点处拆分列表,不想在新列表中添加任何额外的零。似乎应该有一个简单的解决方案,我只是不知道,因为我是这么新。这可以通过使用和来完成 在a中,我们获取列表中的每个项目,并使用来获取数字并将其转换为字符串。然后在字符“”上拆分该字符串: 这为我们提供了一个列表生成器(['1',0'],['0',0'],…)。然

以下是我目前的名单:

x = [1.0, 0.0, 3.5, 1.2, 5.4]
这就是我想要的:

newx = [1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
我只需要在小数点处拆分列表,不想在新列表中添加任何额外的零。似乎应该有一个简单的解决方案,我只是不知道,因为我是这么新。

这可以通过使用和来完成

在a中,我们获取列表中的每个项目,并使用来获取数字并将其转换为字符串。然后在字符
”上拆分该字符串:

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

itertools.chain.from_iterable(...)
然后,我们使用a将单个数字字符串再次转换为整数

>>> 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()
是扁平化iterables的最佳工具-它高效灵活,语法清晰(只是一个函数调用,在stdlib中有清晰的文档)

顺便说一句,理解的工作原理与此相同:

var result = []
for i in x:
    for j in str(i).split('.'):
        result.append(int(j))

这看起来有点神秘,但应该是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]

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

您确定所有数字都只有一个小数点位(并且不会是看起来像数字的字符串)?以下是非音素方式:
[int(c)for c in str(x)if c.isdigit()]
。这是一个数字列表。里面没有小数点。其中的元素也没有。你要求的是将浮点数列表拆分为整数和小数部分的交替列表…但这是一件奇怪的事情,因为小数部分“30”在该定义下与“3”相同。如果你解释一下,也许有人能给你一个更容易理解的答案,或者一个更好的方法来做你真正想做的事情。+1很好的答案,但是在看了这个和我的解决方案之后,我仍然认为这个难以理解的列表理解有点难以理解完美、简单,而且效果很好。如果有机会,你能解释一下发生了什么吗?请将你的结果更新为整数列表而不是字符列表。一些解释会很好-只有代码的答案并不完全有用。
>>> 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]
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))
[int(b) if b.isdigit() else b for a in x for b in str(a).split('.')]
>>> 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]
>>> 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]