如何在列表列表中提取元素并在python中创建另一个元素。所以,我想从中得到:
all_list = [['1 2 3 4','2 3 4 5'],['2 4 4 5', '3 4 5 5' ]]
这样的新列表:
list_of_lists = [[('3','4'),('4','5')], [('4','5'),('5','5')]]
以下是我所做的,但它不起作用。
for i in xrange(len(all_lists)):
newlist=[]
for l in all_lists[i]:
mylist = l.split()
score1 = float(mylist[2])
score2 = mylist[3]
temp_list = (score1, score2)
newlist.append(temp_list)
list_of_lists.append(newlist)
请帮忙。非常感谢提前。
答案 0 :(得分:3)
您可以使用嵌套列表理解。 (这假设你想要每个字符串中的最后两个“分数”):
[[tuple(l.split()[-2:]) for l in list] for list in all_list]
答案 1 :(得分:2)
如果填写mylist
的值,它几乎可以正常工作 - 现在它的未定义。
提示:使用字符串上的split
函数将它们分解为组件,然后可以用结果填充mylist。
提示2:确保在某个时刻将新列表设置回空列表。
答案 2 :(得分:2)
首先,您不需要为all_list列表生成索引。您可以直接迭代它:
for list in all_lists:
for item in list:
# magic stuff
第二句话,您可以通过拼接列表使您的字符串拆分更加简洁:
values = item.split()[-2:] # select last two numbers.
使用地图或列表理解进一步减少它;你可以把所有的东西都浮起来:
# make a list from the two end elements of the splitted list.
values = [float(n) for n in item.split()[-2:]]
使用tuple
内置函数
values = tuple([float(n) for n in item.split()[-2:]])
最后,你可以将它全部折叠为一个大列表理解为sdolan shows。
当然你也可以手动索引结果并创建一个元组,但通常它更冗长,更难更改。
使用您的变量名称取得一些自由,在您的示例中,值为tmp_list
。