web-dev-qa-db-ja.com

Python 2:AttributeError: 'list'オブジェクトには属性 'strip'がありません

リストに小さな問題があります。だから私はlと呼ばれるリストを持っています:

l = ['Facebook;Google+;MySpace', 'Apple;Android']

ご覧のとおり、リストには2つの文字列しかありません。リストl';'で区切り、新しい5つの文字列をl1という名前の新しいリストに入れます。

どうやってやるの?

また、私はこれを次のようにしようとしました:

l1 = l.strip().split(';')

しかし、Pythonエラーを出してください:

AttributeError: 'list' object has no attribute 'strip'

「リスト」オブジェクトに属性「ストリップ」または「分割」がない場合、リストを分割するにはどうすればよいですか?

ありがとう

10
Michael

strip() は文字列のメソッドであり、listで呼び出すため、エラーになります。

>>> 'strip' in dir(str)
True
>>> 'strip' in dir(list)
False

やりたいことをやるには

>>> l = ['Facebook;Google+;MySpace', 'Apple;Android']
>>> l1 = [elem.strip().split(';') for elem in l]
>>> print l1
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]

要素を単一のリスト(リストのリストではなく)にしたいので、2つのオプションがあります。

  1. 空のリストを作成し、それに要素を追加します。
  2. リストをフラット化します。

最初に行うには、コードに従ってください:

>>> l1 = []
>>> for elem in l:
        l1.extend(elem.strip().split(';'))  
>>> l1
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']

2番目を行うには、 itertools.chain

>>> l1 = [elem.strip().split(';') for elem in l]
>>> print l1
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]
>>> from itertools import chain
>>> list(chain(*l1))
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
17
Sukrit Kalra

あなたがしたいことは-

strtemp = ";".join(l)

最初の行は、MySpaceの最後に;を追加するため、分割中にMySpaceAppleが出力されません。これにより、lが1つの文字列に結合されます。

l1 = strtemp.split(";")

これは、strtempが.split()を持つ文字列であるため機能します

3
svineet

これはあなたが望むものでなければなりません:

[x for y in l for x in y.split(";")]

出力:

['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
2
iCodez

お役に立てれば :)

>>> x = [i.split(";") for i in l]
>>> x
[['Facebook', 'Google+', 'MySpace'], ['Apple', 'Android']]
>>> z = [j for i in x for j in i]
>>> z
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
>>> 
2
Pawel Miech

私が今試した1つの可能な解決策は次のとおりです:

>>> l=['Facebook;Google+;MySpace', 'Apple;Android']
>>> new1 = l[0].split(';')
>>> new1
['Facebook', 'Google+', 'MySpace']
>>> new2= l[1].split(';')`enter code here`
>>> new2
['Apple', 'Android']
>>> totalnew = new1 + new2
>>> totalnew
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
1
Ana Salinas

リストの文字列エントリを分割します。 l [0] .strip()

0
Jiminion

文字列を分割してから chain.from_iterable を使用して、それらを単一のリストに結合します

>>> import itertools
>>> l = ['Facebook;Google+;MySpace', 'Apple;Android']
>>> l1 = [ x for x in itertools.chain.from_iterable( x.split(';') for x in l ) ]
>>> l1
['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
0
ersran9