如何在Python中分割列表项
假设我有一个这样的列表:
names= ["my name xyz","your name is abc","her name is cfg zyx"]
我想把它们分开,像这样:
my_array[0]= ["my","name","xyz"]
my_arrray[1]= ["your","name","is","abc"]
my_array[2]= ["her","name","is","cfg","zyx"]
这样我就可以单独选择每个词,像这样:
my_array[0][0]= my
my_array[0][1]= name
my_array[1][2]= is
my_array[0][2]= xyz
我尝试的Python代码如下:
names_abc= names.splitlines(True)
#print(names_abc)
i=0
while i < len(names_abc):
my_array= names_abc[i].split()
print(my_array[0])
i=i+1
但是这段代码没有达到我想要的效果。它虽然把列表分开了,但不能单独选择每个词。例如,上面代码的输出是:
my
your
her
这显然是不对的。我非常希望能得到Python专家的帮助。提前谢谢大家。
3 个回答
0
我会创建一个新的列表,然后用一些临时字符串填充这个列表,这些临时字符串是由你最开始的列表中的字符组成的。
临时字符串会在遇到空格时结束,当一个字符串完成后,就会把它添加到一个临时列表(list_tmp)中。
在把所有的项目都处理成字符串并添加到临时列表后,我们再把这个临时列表添加到最终的列表中:
a=["my name xyz","your name is abc","her name is cfg zyx"]
l=[]
for i in enumerate(a):
tmp_str = ''
list_tmp=[]
for j in i[1]:
if " " in j:
list_tmp.append(tmp_str)
tmp_str=''
else:
tmp_str+=j
else:
list_tmp.append(tmp_str)
l.append(list_tmp)
print l
print l[0][1]
2
你可以对列表中的每个元素使用 split()
方法,默认情况下,它会根据空格来分割这些元素。
>>> names= ["my name xyz","your name is abc","her name is cfg zyx"]
>>> [i.split() for i in names]
[['my', 'name', 'xyz'], ['your', 'name', 'is', 'abc'], ['her', 'name', 'is', 'cfg', 'zyx']]
5
你可以用一种叫做列表推导式的方式来定义my_array
:
my_array = [phrase.split() for phrase in names]
这和下面的写法是一样的:
my_array = list()
for phrase in names:
my_array.append(phrase.split())
示例:
In [21]: names= ["my name xyz","your name is abc","her name is cfg zyx"]
In [22]: my_array = [phrase.split() for phrase in names]
In [23]: my_array
Out[23]:
[['my', 'name', 'xyz'],
['your', 'name', 'is', 'abc'],
['her', 'name', 'is', 'cfg', 'zyx']]
In [24]: my_array[0][1]
Out[24]: 'name'
用这种方式定义my_array
有一个问题:
while i < len(names_abc):
my_array= names_abc[i].split()
就是每次经过while-loop
时,my_array
都会被赋值为一个新的列表。所以,my_array
并不会变成一个包含多个列表的列表。相反,在while-loop
结束后,它只会保留最后一次的值。
与其打印my_array[0]
,不如试试直接打印print(my_array)
。这样可能更容易理解你为什么会得到那个结果。