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()是字符串的方法,您在 a 上调​​用它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']
于 2013-07-19T16:44:19.920 回答
4

你想做的是——

strtemp = ";".join(l)

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

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 回答
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']
>>> 
于 2013-07-19T16:54:05.360 回答
1

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

>>> 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']
于 2015-12-21T14:11:19.893 回答
1

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

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

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

print l1 #printing

输出

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

于 2019-10-28T10:55:44.640 回答
0

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

于 2013-07-19T16:44:56.897 回答
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']
于 2013-07-19T16:47:36.473 回答