2010-10-10 2 views
7

Я посмотрел в моей книге и в документации, и сделал это:Что случилось с тем, как я разделяю строку на python?

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

Я получаю сообщение об ошибке, говорящее раскол() не принимает никаких аргументов ключевых слов. Что не так?

Я хочу иметь ['h', 'e', ​​'l', 'l', 'o'] Я пробовал не передавать sep и просто a.split (''), и получил ['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) 

Обратите внимание, как вы можете изменить порядок параметров ключевого слова.

+0

list(), похоже, работает так же, как и цикл for. Что более эффективно? –

+0

@Jack S: Это зависит от того, что вы хотите сделать, но цикл 'for' может быть самым простым, если вы просто хотите перебирать каждый символ. Создание списка включает выделение памяти для списка и копирование каждого символа, который не требуется для цикла 'for'. –

4

попробовать просто:

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

заметить разницу: a.split(' ') вместо a.split(sep=' '). Несмотря на то, что документация называет аргумент «sep», это действительно просто для целей документации. Он фактически не принимает аргументы ключевых слов.

В ответ на замечание OP по этому сообщению:

"a b c,d e".split(' ') «отделяет а б в, г е» в массив строк. Каждый «найденный» рассматривается как разделитель. Таким образом, разделенные строки: ["a", "b", "c,d", "e"]. "hello".split(' ') разделяет «привет» каждый раз, когда он видит пробел, но в «привет» нет пробелов

Если вы хотите получить массив букв, используйте list comprehension. [letter for letter in string], например [letter for letter in "hello"], или просто используйте конструктор list, как в list("hello").

+0

Я должен был быть более конкретным.Я попробовал это и получил ['hello'], я хочу ['h', 'e', ​​'l', 'l', 'o'] –

2

Учитывая строку x, то Pythonic способа разделить его на отдельные символы:

for c in x: 
    print c 

Если вы абсолютно необходим список, то

redundant_list = list(x) 

Я называю список избыточный для струнного раскола в список символов менее кратким и часто отражает C влияющие шаблоны обработки строк.

Смежные вопросы