【问题标题】:Python 2: AttributeError: 'list' object has no attribute 'strip'Python 2:AttributeError:“list”对象没有属性“strip”
【发布时间】:2013-07-19 01:09:10
【问题描述】:

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

谢谢

【问题讨论】:

  • 顺便说一下,ll1 是您可以使用的最糟糕的变量名;请不要在实际代码中使用它们。 :)
  • 一个列表已经被拆分为列表元素...

标签: python list split


【解决方案1】:

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. 扁平化列表。

首先,按照代码:

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

【讨论】:

  • 是的,但我需要列表 l1 如下所示:l1 = ['Facebook', 'Google+', 'MySpace', 'Apple', 'Android']
  • 你需要怎样的输出?我认为,一个列表就足够了。
  • @MishaVayvala:我编辑了答案。这应该是你现在想要的。
【解决方案2】:

你想做的是——

strtemp = ";".join(l)

第一行在MySpace 的末尾添加一个;,以便在拆分时不会给出MySpaceApple 这会将 l 连接成一个字符串,然后您就可以 -

l1 = strtemp.split(";")

这是可行的,因为 strtemp 是一个具有 .split() 的字符串

【讨论】:

  • 您的代码有问题。我运行了它,只取回了我应该拥有的 5 件物品中的 4 件。由于某种原因缺少“Apple”。
  • 等等,让我检查一下。我会回来的。
  • 哦,那是因为没有';'在 MySpace 之后。让我更正代码。
  • 如果你这样做会不会更好";".join(l)
【解决方案3】:

这应该是你想要的:

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

输出:

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

【讨论】:

    【解决方案4】:

    希望这会有所帮助:)

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

    【讨论】:

    • 感谢您出色的拆分方式! x = [i.split(";") for i in l] 已拆分列表,但 z = [j for i in x for j in i] 有什么用? x和z有什么区别?
    【解决方案5】:

    我现在尝试的一个可能的解决方案是: (确保以一般方式使用 for,while with index)

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          你可以先用分隔符';'连接列表中的字符串使用函数join,然后使用split函数来创建列表:

          l = ['Facebook;Google+;MySpace', 'Apple;Android']
          
          l1 = ";".join(l).split(";")  
          
          print l1 #printing
          

          输出

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

          【讨论】:

            猜你喜欢
            • 2013-07-18
            • 1970-01-01
            • 1970-01-01
            • 2017-05-03
            • 2020-03-25
            • 2016-08-11
            • 2021-07-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多