15

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

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

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

どうやってやるの?

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

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

しかし、Pythonは私にエラーを出します:

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

'list' オブジェクトに属性 'strip' または 'split' がない場合、どうすればリストを分割できますか?

ありがとう

4

8 に答える 8

24

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']
于 2013-07-19T16:44:19.920 に答える
4

あなたがしたいことは -

strtemp = ";".join(l)

;最初の行は aを末尾に追加してMySpace、分割中に出力されないようにします。MySpaceApple これにより、l が 1 つの文字列に結合され、次のことができます。

l1 = strtemp.split(";")

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

于 2013-07-19T16:48:47.570 に答える
2

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

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

出力:

['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
于 2013-07-19T16:48:00.497 に答える
0

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

于 2013-07-19T16:44:56.897 に答える
0

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

>>> 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']
于 2013-07-19T16:47:36.473 に答える