Что такое хороший способ сделать some_string.split('') в python? Этот синтаксис дает ошибку:
a = '1111'
a.split('')
ValueError: empty separator
Я хотел бы получить:
['1', '1', '1', '1']
Ответ 1
Используйте list():
>>> list('1111')
['1', '1', '1', '1']
В качестве альтернативы вы можете использовать map():
>>> map(None, '1111')
['1', '1', '1', '1']
Разница во времени:
$ python -m timeit "list('1111')"
1000000 loops, best of 3: 0.483 usec per loop
$ python -m timeit "map(None, '1111')"
1000000 loops, best of 3: 0.431 usec per loop
Ответ 2
Можно напрямую записывать строки для
>>> list('1111')
['1', '1', '1', '1']
или использования списков
>>> [i for i in '1111']
['1', '1', '1', '1']
второй способ может быть полезен, если вы хотите разделить строки на подстроки длиной более 1 символа
>>> some_string = '12345'
>>> [some_string[i:i+2] for i in range(0, len(some_string), 2)]
['12', '34', '5']
Ответ 3
Строки являются итерабельными и могут быть проиндексированы, поэтому вам совсем не нужно разделить его:
>>> for char in '11111':
... print char
...
1
1
1
1
1
>>> '11111'[4]
'1'
Вы можете «разбить» его на вызов в список, но это не имеет большого значения:
>>> for char in list('11111'):
... print char
...
1
1
1
1
1
>>> list('11111')[4]
'1'
Поэтому вам нужно сделать это, только если ваш код явно ожидает список. Например:
>>> list('11111').append('2')
>>> l = list('11111')
>>> l.append(2)
>>> l
['1', '1', '1', '1', '1', 2]
Это не работает с прямой строкой:
>>> l.append('2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'
В этом случае вам понадобится:
>>> l += '2'
>>> l
'111112'
Ответ 4
Метод # 1:
s="Amalraj"
l=[i for i in s]
print(l)
Вывод:
['A', 'm', 'a', 'l', 'r', 'a', 'j']
Способ №2:
s="Amalraj"
l=list(s)
print(l)
Вывод:
['A', 'm', 'a', 'l', 'r', 'a', 'j']
Способ № 3:
import re; # importing regular expression module
s="Amalraj"
l=re.findall('.',s)
print(l)
Вывод:
['A', 'm', 'a', 'l', 'r', 'a', 'j']
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Closed
upworkap opened this issue
Mar 2, 2020
· 1 comment
Comments
Is it possible to use scrapy shell and paste non-ascii characters?
I think it is related to IPython.
2 participants
TLDR : Если вы не указываете символ для str.split для разделения, по умолчанию используется пробел или символ табуляции. Моя ошибка была связана с тем, что между моими цитатами не было пробела.
В случае, если вам интересно, указанный мной разделитель является пробелом:
words = stuff.split(" ")
Строка в вопросе This is an example of a question. Я также попробовал # в качестве разделителя и вставил # в мое предложение, и получил ту же ошибку.
Изменить. Вот полный блок
def break_words(stuff):
"""This function will break up words for us."""
words = stuff.split(" ")
return words
sentence = "This is an example of a sentence."
print break_words(sentence)
Когда я запускаю это как py-файл, он работает. но когда я запускаю интерпретатор, импортируйте модуль и введите: {{Х0}} затем print break_words(sentence)
Я получаю вышеупомянутую ошибку.
И да, я понимаю, что это избыточно, я просто играю с функциями.
Правка 2. Вот полный след.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ex25.py", line 6, in break_words
words = stuff.split(' ')
Изменить 3: я не знаю, что я сделал по-другому, но когда я попробовал это снова сейчас, это сработало:
>>> s = "sdfd dfdf ffff"
>>> ex25.break_words(s)
['sdfd', 'dfdf', 'ffff']
>>> words = ex25.break_words(s)
>>>
Как видите, ошибок нет.
7 ответов
Лучший ответ
У вас была та же проблема в этом упражнении из «Питона на харвее». Я просто должен был поставить пробел между кавычками.
def breakWords(stuff):
"""this function will break up words."""
words = stuff.split(" ")
return words
Также, как кто-то упомянул, вы должны перезагрузить модуль. хотя в этом примере, поскольку с помощью командной строки в windows мне пришлось выйти (), затем перезапустить сеанс py и снова импортировать упражнение.
8
Sotos
30 Июн 2017 в 09:05
Как показано ниже в выводе отладчика, эта ошибка генерируется пустым параметром для разделения
>>> s="abc def ghi jkl"
>>> s.split(" ")
['abc', 'def', 'ghi', 'jkl']
>>> s.split("")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: empty separator
>>>
Ваш код должен передавать пустое значение для разделения. Исправьте это, и ошибка исчезнет.
3
Vorsprung
29 Дек 2013 в 16:08
-
Добавьте туда пробел:
words = stuff.split(" ") -
Перезагрузите ваш переводчик
0
Eldad Assis
2 Июн 2016 в 07:30
Я получил проблему, похожую на ту же ошибку.
Но дело в том, что я пропустил пробел в функции split (» «). # Значение Ошибка: Пустой разделитель
Если вы вставите пробел между апострофами, ошибка будет исправлена
0
Kathiravan Natarajan
18 Май 2017 в 20:50
У меня была точно такая же проблема. Первоначальная ошибка произошла из-за пустого разделителя », который я забыл вставить в него. После того, как вы изменили код, вам нужно выйти из Python, а затем перезапустить Python и импортировать ex25. Это будет работать. Если вы не выходите из Python и просто импортируете код снова, он не будет работать. Или самый простой способ — перезагрузить (ex25), тогда это решит проблему. Надеюсь, что это может помочь
0
cansdmz
10 Фев 2017 в 21:36
Вам определенно не нужны кавычки в скобках.
sentence = "bla mla gla dla"
sentence.split()
Дам тебе
[‘bla’, ‘mla’, ‘gla’, ‘dla’]
В результате по умолчанию.
0
diamind
15 Июл 2019 в 02:40
У меня была та же проблема, когда я учился по книге — изучать Python трудным путем,
Удаление 2 апостроф («») решило проблему для меня.
Words = stuff.split () # удаление апострофов устраняет ошибку
0
Alex
8 Мар 2017 в 08:34

