web-dev-qa-db-ja.com

Pythonの文字列に文字列を分割します

だから私がやりたいのは、基本的に.txtファイルからtxtの行を吸い上げてから、その文字をリストに割り当ててから、リスト内のすべての個別の文字のリストを作成することです。

リストのリスト。

現時点では、私は試しました:

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

そして、それはすべて最高です。単一の文字を抽出して新しいリストに割り当てる方法はよくわかりません。

私は次のようなことをしたい:

fL = 'FHFF HHXH XXXX HFHX' 

^^^なので、.txtファイルから取得した行になります。

そして、これを次のように変えます。

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

^^^そしてそれは新しいリストであり、それぞれの文字はそれ自身のものです。

52
FlexedCookie

文字列は反復可能です(リストのように)。

私はあなたが本当に次のようなものが欲しいと解釈しています:

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には、ファイル内のすべての文字が含まれます。

22
koblas

これは list を使用して実行できます。

new_list = list(fL)

私の知る限り、行のスペースはこのリストに含まれることに注意してください。

117

少し遅れているようですが、...

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

したがって、文字列helloを個々の文字としてリストに追加するには、次を試してください。

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

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

ただし、これを行う方が簡単です。

splitlist = list(newlist)
print (splitlist)
8
Tim
fO = open(filename, 'rU')
lst = list(fO.read())
7
John La Rooy
a='hello world'
map(lambda x:x, a)

['こんにちは世界']

簡単な方法は、関数「map()」を使用することです。

4
shuaiming

または、非常に大きなファイル/リストを操作する場合は、「計算上より効率的」であるはずの派手なリスト理解を使用します

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

Btw:受け入れられた答えは空白を説明していません...

4
user2489252

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ループを使用します。このメソッドは、最も読みやすいです。

3
Mr. Me

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
2
cs95

文字列は(不変の)シーケンスであるため、リストと同様に展開できます。

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))

マップオブジェクトをリストに変換するには、解凍方法よりも時間がかかります。

0
ol mighty