Разбить строку в список символов в 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);
имейте в виду, что любые пробелы в строке будут включены в этот список, насколько мне известно.
добавить строку hello
в список как отдельные символы, попробуйте это:
newlist = []
newlist[:0] = 'hello'
print (newlist)
['h','e','l','l','o']
тем не менее, это проще сделать:
splitlist = list(newlist)
print (splitlist)
или используйте причудливое понимание списка, которое должно быть "вычислительно более эффективным" при работе с очень большими файлами/списками
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 ()".