我分割字符串的方式有什么问题?

7 投票
4 回答
2141 浏览
提问于 2025-04-16 05:16

我查了我的书和文档,然后做了这个:

a = "hello"
b = a.split(sep= ' ')
print(b)

但是我收到一个错误,提示说 split() 不接受关键字参数。这是怎么回事呢?

我想得到 ['h','e','l','l','o'] 这个结果。我试着不传入分隔符,直接用 a.split(' '),结果却得到了 ['hello']。

4 个回答

2

给定一个字符串 x,用Python的方式把它拆分成单个字符的方法是:

for c in x:
    print c

如果你真的需要一个列表的话,

redundant_list = list(x)

我觉得把字符串拆分成字符列表有点多余,因为这样做不够简洁,而且常常会受到C语言处理字符串方式的影响。

5

你可以试试这样:

a = "hello"
b = a.split(' ')
print(b)

注意这个区别:用 a.split(' ') 而不是 a.split(sep=' ')。虽然文档里把这个参数叫做 "sep",但这其实只是为了文档好看。它实际上并不接受关键字参数。

针对楼主在这条帖子上的评论:

"a b c,d e".split(' ') 会把 "a b c,d e" 分割成一个字符串数组。每个找到的空格 ' ' 都被当作分隔符。所以分开的字符串是 ["a", "b", "c,d", "e"]。而 "hello".split(' ') 则是每当看到空格就分割 "hello",但 "hello" 里没有空格。

如果你想要一个字母的数组,可以使用 列表推导式。比如 [letter for letter in string],例如 [letter for letter in "hello"],或者直接用 list 构造函数,像这样 list("hello")

6

Python有一个叫“关键字参数”的概念,这意味着你可以在调用函数时告诉它你传入的是哪个参数。不过,标准的 split() 函数并不支持这种参数传递方式。

如果你想把一个字符串拆分成字符列表,可以使用 list()

>>> a = "hello"
>>> list(a)
['h', 'e', 'l', 'l', 'o']

顺便提一下,关键字参数的一个例子可能是:

def foo(bar, baz=0, quux=0):
    print "bar=", bar
    print "baz=", baz
    print "quux=", quux

你可以用几种不同的方式来调用这个函数:

foo(1, 2, 3)
foo(1, baz=2, quux=3)
foo(1, quux=3, baz=2)

注意,你可以改变关键字参数的顺序。

撰写回答