Python 有没有一种方法可以直接转换从拆分字符串中提取的列表元素?

Python 有没有一种方法可以直接转换从拆分字符串中提取的列表元素?,python,python-3.x,list,split,type-conversion,Python,Python 3.x,List,Split,Type Conversion,假设我把这一行作为输入 n='3.45.9 4.76 1.0' 我想把它分割成一个列表,并将每个元素转换成一个浮点。我会这样做的 nlist = n.split() for i in range(nlist): nlist[i] = float(nlist[i]) 这很好,但出于好奇,我想知道是否有办法将列表中的每个元素保存为实际数字,以避免执行第二个循环并手动转换每个元素。有几种方法可以做到这一点。您可以将每个项目映射到浮点,然后使用列表将生成的映射转换为列表: nlist = li

假设我把这一行作为输入 n='3.45.9 4.76 1.0'

我想把它分割成一个列表,并将每个元素转换成一个浮点。我会这样做的

nlist = n.split()
for i in range(nlist):
    nlist[i] = float(nlist[i])

这很好,但出于好奇,我想知道是否有办法将列表中的每个元素保存为实际数字,以避免执行第二个循环并手动转换每个元素。

有几种方法可以做到这一点。您可以将每个项目映射到浮点,然后使用列表将生成的映射转换为列表:

nlist = list(map(float, n.split()))
你可以做一个列表理解,我认为它更像蟒蛇:

nlist = [float(i) for i in n.split()]

编辑:我刚刚意识到您正在试图避免第二次迭代。正如Sayse所提到的,如果您真的想避免第二次迭代,则需要逐个字符地处理字符串并创建自己的字符串。这比列表理解成本更高,因此最好避免这样做。

有几种方法可以做到这一点。您可以将每个项目映射到浮点,然后使用列表将生成的映射转换为列表:

nlist = list(map(float, n.split()))
你可以做一个列表理解,我认为它更像蟒蛇:

nlist = [float(i) for i in n.split()]
编辑:我刚刚意识到您正在试图避免第二次迭代。正如Sayse所提到的,如果您真的想避免第二次迭代,则需要逐个字符地处理字符串并创建自己的字符串。这比列表理解成本更高,因此最好避免这样做。

使用Eval-> Eval将自动将字符串转换为浮点数据类型。然后你如何迭代它,用一个列表理解,一个函数调用,或者一个for循环,其实并不重要

n='3.4 5.9 4.76 1.0'

nlist = [eval(n_) for n_ in n.split()]
for i in nlist:
    print(type(i))
输出 输出

使用Eval-> Eval将自动将字符串转换为浮点数据类型。然后你如何迭代它,用一个列表理解,一个函数调用,或者一个for循环,其实并不重要

n='3.4 5.9 4.76 1.0'

nlist = [eval(n_) for n_ in n.split()]
for i in nlist:
    print(type(i))
输出 输出


有,但它涉及到对字符串的字符进行迭代,并建立一个子字符串,直到到达一个空格,然后将其转换为浮点。如果不重复两次,没有其他方法可以做到这一点

curr_word = ""
floats = []
for c in n:
    if c == " ":
        floats.append(float(curr_word))
        curr_word = ""
        continue
    curr_word += c
if curr_word:
    floats.append(float(curr_word))

使用当前的方法或列表理解要有效得多,但它需要迭代字符串的字符并建立一个子字符串,直到到达一个空格,然后将其转换为浮点。如果不重复两次,没有其他方法可以做到这一点

curr_word = ""
floats = []
for c in n:
    if c == " ":
        floats.append(float(curr_word))
        curr_word = ""
        continue
    curr_word += c
if curr_word:
    floats.append(float(curr_word))

使用当前方法或列表理解要有效得多

我不认为它比列表理解快。@Asocia-更新了,但代码在这里并不重要,这个问题是关于避免做第二个循环,所以列表理解是否更快是无关紧要的,并且没有回答我所说的问题:使用当前的方法或列表理解更有效——这两个解决方案都在上面——不管你迭代2次还是10次。这是不变的,不重要。@Asocia-我正在分享做某事的唯一方法。问题是如何避免第二个循环——两个循环被拆分,然后使用for循环进行迭代。唯一的方法是自己手动拆分,然后处理刚刚拆分的元素哦,你说得对。OP特别要求避免第二次迭代,我错过了。我的错:/I我不认为它比列表理解快。@Asocia-更新了,但代码在这里并不重要,这个问题是关于避免做第二个循环,所以列表理解是否更快是无关紧要的,并且没有回答我所说的问题:使用当前的方法或列表理解更有效——这两个解决方案都在上面——不管你迭代2次还是10次。这是不变的,不重要。@Asocia-我正在分享做某事的唯一方法。问题是如何避免第二个循环——两个循环被拆分,然后使用for循环进行迭代。唯一的方法是自己手动拆分,然后处理刚刚拆分的元素哦,你说得对。OP特别要求避免第二次迭代,我错过了。我的错:/