假设我有一个如下列表:
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
但是这段代码并没有达到我的预期。它会拆分列表但不能单独选择单词。例如,上面代码的输出如下:
我 您的 她的
这绝对是错误的。我将很高兴得到python专家的帮助。提前谢谢。
答案 0 :(得分:3)
您可以使用list comprehension定义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()
每次通过my_array
将while-loop
分配给新列表。因此my_array
不会成为列表列表。相反,在while-loop
之后,它只保留其最后一个值。
不要打印my_array[0]
,而是尝试print(my_array)
本身。为什么你得到你得到的结果可能会更清楚。
答案 1 :(得分:1)
您可以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']]
答案 2 :(得分:0)
我会创建一个新列表,并用包含从您的起始列表中的字符构建的temporaray字符串的列表填充它。
临时字符串以空格结束,当字符串完成时,它将被添加到文本列表(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]