如何将字符串分割为字符列表?Str.split不起作用。

"foobar"    →    ['f', 'o', 'o', 'b', 'a', 'r']

当前回答

Split()内置函数只会在特定条件的基础上分离值,但在单个词中,它不能满足条件。因此,可以借助list()来解决。它在内部调用数组,并根据数组存储值。

假设,

a = "bottle"
a.split() // will only return the word but not split the every single char.

a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']

其他回答

from itertools import chain

string = 'your string'
chain(string)

类似于list(string),但返回的生成器在使用点被延迟计算,因此内存效率高。

下面是一个很好的脚本,可以帮助你找到最有效的方法:

import timeit
from itertools import chain

string = "thisisthestringthatwewanttosplitintoalist"

def getCharList(str):
  return list(str)

def getCharListComp(str):
  return [char for char in str]

def getCharListMap(str):
  return list(map(lambda c: c, str))

def getCharListForLoop(str):
  list = []
  for c in str:
    list.append(c)

def getCharListUnpack(str):
  return [*str]

def getCharListExtend(str):
  list = []
  return list.extend(str)

def getCharListChain(str):
  return chain(str)
 
time_list = timeit.timeit(stmt='getCharList(string)', globals=globals(), number=1)
time_listcomp = timeit.timeit(stmt='getCharListComp(string)', globals=globals(), number=1)
time_listmap = timeit.timeit(stmt='getCharListMap(string)', globals=globals(), number=1)
time_listforloop = timeit.timeit(stmt='getCharListForLoop(string)', globals=globals(), number=1)
time_listunpack = timeit.timeit(stmt='getCharListUnpack(string)', globals=globals(), number=1)
time_listextend = timeit.timeit(stmt='getCharListExtend(string)', globals=globals(), number=1)
time_listchain = timeit.timeit(stmt='getCharListChain(string)', globals=globals(), number=1)

print(f"Execution time using list constructor is {time_list} seconds")
print(f"Execution time using list comprehension is {time_listcomp} seconds")
print(f"Execution time using map is {time_listmap} seconds")
print(f"Execution time using for loop is {time_listforloop} seconds")
print(f"Execution time using unpacking is {time_listunpack} seconds")
print(f"Execution time using extend is {time_listextend} seconds")
print(f"Execution time using chain is {time_listchain} seconds")

使用列表构造函数:

>>> list("foobar")
['f', 'o', 'o', 'b', 'a', 'r']

List使用通过迭代输入iterable获得的项构建一个新列表。字符串是一个可迭代对象——在每个迭代步骤中迭代它会产生一个单独的字符。

将字符串传递给list()

s = "mystring"
l = list(s)
print l

你也可以用这种非常简单的方式来做,没有list():

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']