如何在Python中分割列表项

1 投票
3 回答
11846 浏览
提问于 2025-04-18 14:38

假设我有一个这样的列表:

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)。这样可能更容易理解你为什么会得到那个结果。

撰写回答