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

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

Итак, список списков.

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

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

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

Я хочу сделать что-то вроде:

fL = 'FHFF HHXH XXXX HFHX' 

^^^ Так что, как линия, которую я получил от.txt-файл.

а затем превратить его в это:

['F', 'H', 'F', 'F', 'H' ...] 

^^^ и это новый список, с каждого персонажа по своему.

8 ответов


строки являются итерационными (как и список).

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

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)

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


вы можете сделать это с помощью список:

fNewList=list(fL);

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


Я немного опоздал, кажется, но...

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

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

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

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

тем не менее, это проще сделать:

splitlist = list(newlist)
print (splitlist)

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

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

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

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


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

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]  

.

.

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

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

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

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


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

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

простой способ-использовать функцию " map ()".