Python 2:AttributeError:'list'对象没有属性'strip'

时间:2013-07-19 16:42:52

标签: python list split

我的列表有一个小问题。所以我有一个名为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'属性,我该如何拆分列表?

由于

8 个答案:

答案 0 :(得分:17)

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']]

因为,您希望元素位于单个列表中(而不是列表列表),您有两个选择。

  1. 创建一个空列表并向其追加元素。
  2. 压扁清单。
  3. 要做第一个,请遵循以下代码:

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

    要做第二步,请使用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']
    

答案 1 :(得分:2)

这应该是你想要的:

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

输出:

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

答案 2 :(得分:2)

你想做的是 -

strtemp = ";".join(l)

第一行在;的末尾添加了MySpace,以便在拆分时不会发出MySpaceApple 这将l加入一个字符串,然后你可以 -

l1 = strtemp.split(";")

这是有效的,因为strtemp是一个包含.split()

的字符串

答案 3 :(得分:2)

希望这会有所帮助:)

>>> 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']
>>> 

答案 4 :(得分:1)

我现在尝试过的一个可能的解决方案是: (确保以一般方式使用for,而使用索引)

select l.*, l2.count, l2.minId from tmpLane l 
JOIN (SELECT id, min(ID) as minId from tmpLane 
  GROUP BY origRegion, origState, destRegion, destState) l2 on l.id = l2.id;

答案 5 :(得分:0)

您拆分列表的字符串条目。升[0] .strip()

答案 6 :(得分:0)

拆分字符串,然后使用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']

答案 7 :(得分:0)

您可以先用分隔符';'将列表中的字符串连接起来。使用功能join,然后使用split功能创建列表:

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

l1 = ";".join(l)).split(";")  

print l1

输出

  

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