だから私がやりたいのは、基本的に.txtファイルからtxtの行を吸い上げてから、その文字をリストに割り当ててから、リスト内のすべての個別の文字のリストを作成することです。
リストのリスト。
現時点では、私は試しました:
fO = open(filename, 'rU')
fL = fO.readlines()
そして、それはすべて最高です。単一の文字を抽出して新しいリストに割り当てる方法はよくわかりません。
私は次のようなことをしたい:
fL = 'FHFF HHXH XXXX HFHX'
^^^なので、.txtファイルから取得した行になります。
そして、これを次のように変えます。
['F', 'H', 'F', 'F', 'H' ...]
^^^そしてそれは新しいリストであり、それぞれの文字はそれ自身のものです。
文字列は反復可能です(リストのように)。
私はあなたが本当に次のようなものが欲しいと解釈しています:
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)
charsには、ファイル内のすべての文字が含まれます。
少し遅れているようですが、...
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())
a='hello world'
map(lambda x:x, a)
['こんにちは世界']
簡単な方法は、関数「map()」を使用することです。
または、非常に大きなファイル/リストを操作する場合は、「計算上より効率的」であるはずの派手なリスト理解を使用します
fd = open(filename,'r')
chars = [c for line in fd for c in line if c is not " "]
fd.close()
Btw:受け入れられた答えは空白を説明していません...
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
または、1つのライナーが必要な場合
#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に精通している必要があり、その結果、一部の可読性が失われます
文字を繰り返し処理するだけで、リストの保存を気にしない場合は、ネストされたforループを使用します。このメソッドは、最も読みやすいです。
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
文字列は(不変の)シーケンスであるため、リストと同様に展開できます。
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))
マップオブジェクトをリストに変換するには、解凍方法よりも時間がかかります。