Подтвердить что ты не робот

Разбить строку на список символов в Python

По сути, я хочу высосать строку текста из файла, назначить символы в список и создать список всех отдельных символов в списке - список списков.

На данный момент я попробовал это:

fO = open(filename, 'rU')
fL = fO.readlines()

Это все, что у меня есть. Я не совсем знаю, как извлечь отдельные символы и назначить их в новый список.

Строка, которую я получаю из файла, будет выглядеть примерно так:

fL = 'FHFF HHXH XXXX HFHX'

Я хочу включить его в этот список, чтобы каждый отдельный символ был отдельным:

['F', 'H', 'F', 'F', 'H', ...]
4b9b3361

Ответ 1

Строки являются итерабельными (точно так же, как список).

Я интерпретирую, что вы действительно хотите что-то вроде:

fd = open(filename,'rU')
chars = []
for line in fd:
   for c in line:
       chars.append(c)

или

fd = open(filename, 'rU')
chars = []
for line in fd:
    chars.extend(line)

или

chars = []
with open(filename, 'rU') as fd:
    map(chars.extend, fd)

символы будут содержать все символы в файле.

Ответ 2

Вы можете сделать это, используя список:

new_list = list(fL)

Помните, что любые пробелы в строке будут включены в этот список, насколько мне известно.

Ответ 3

Я немного опаздываю, но...

a='hello'
print list(a)
# ['h','e','l','l', 'o']

Ответ 4

Поэтому, чтобы добавить строку hello в список в виде отдельных символов, попробуйте следующее:

newlist = []
newlist[:0] = 'hello'
print (newlist)

  ['h','e','l','l','o']

Однако это проще сделать:

splitlist = list(newlist)
print (splitlist)

Ответ 5

fO = open(filename, 'rU')
lst = list(fO.read())

Ответ 6

Или используйте причудливое понимание списка, которое должно быть "более эффективно вычисляемо" при работе с очень большими файлами/списками

fd = open(filename,'r')
chars = [c for line in fd for c in line if c is not " "]
fd.close()

Btw: ответ, который был принят, не учитывает пробелы...

Ответ 7

a='hello world'
map(lambda x:x, a)

['h', 'e', ​​'l', 'l', 'o', '', 'w', 'o', 'r', 'l', 'd']

Простым способом является использование функции "map()".

Ответ 8

В python многие вещи повторяются, включая файлы и строки. Итерация над файловым менеджером дает вам список всех строк в этом файле. Итерация по строке дает вам список всех символов в этой строке.

charsFromFile = []
filePath = r'path\to\your\file.txt' #the r before the string lets us use backslashes

for line in open(filePath):
    for char in line:
        charsFromFile.append(char) 
        #apply code on each character here

или если вы хотите один вкладыш

#the [0] at the end is the line you want to grab.
#the [0] can be removed to grab all lines
[list(a) for a in list(open('test.py'))][0]  

.

.

Изменить: в качестве упоминания agf вы можете использовать itertools.chain.from_iterable

Его метод лучше, если вы не хотите, чтобы указать, какие линии захватывать list(itertools.chain.from_iterable(open(filename, 'rU)))

Однако это требует, чтобы кто-то был знаком с itertools и, как результат, терял некоторую удобочитаемость

Если вы хотите только перебирать символы и не заботиться о сохранении списка, я бы использовал вложенные для циклов. Этот метод также является наиболее читаемым.

Ответ 9

Python3. 5+ позволяет использовать PEP 448 - расширенные обобщения распаковки:

>>> string = 'hello'
>>> [*string]
['h', 'e', 'l', 'l', 'o']

Это спецификация синтаксиса языка, поэтому он быстрее, чем list вызовов:

>>> from timeit import timeit
>>> timeit("list('hello')")
0.3042821969866054
>>> timeit("[*'hello']")
0.1582647830073256

Ответ 10

Поскольку строки являются (неизменяемыми) последовательностями, они могут быть распакованы подобно спискам:

with open(filename, 'rU') as fd:
    multiLine = fd.read()
    *lst, = multiLine

При запуске map (lambda x: x, multiLine) это явно более эффективно, но на самом деле он возвращает объект карты вместо списка.

with open(filename, 'rU') as fd:
    multiLine = fd.read()
    list(map(lambda x: x, multiLine))

Превращение объекта карты в список займет больше времени, чем метод распаковки.