从列表列表中提取

时间:2010-07-14 22:11:10

标签: python

如何在列表列表中提取元素并在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)

请帮忙。非常感谢提前。

3 个答案:

答案 0 :(得分:3)

您可以使用嵌套列表理解。 (这假设你想要每个字符串中的最后两个“分数”):

[[tuple(l.split()[-2:]) for l in list] for list in all_list]

答案 1 :(得分:2)

如果填写mylist的值,它几乎可以正常工作 - 现在它的未定义。

提示:使用字符串上的split函数将它们分解为组件,然后可以用结果填充mylist。

提示2:确保在某个时刻将新列表设置回空列表。

答案 2 :(得分:2)

添加到eruciforms answer

首先,您不需要为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内置函数

对结果列表进行tuplify
values = tuple([float(n) for n in item.split()[-2:]])

最后,你可以将它全部折叠为一个大列表理解为sdolan shows

当然你也可以手动索引结果并创建一个元组,但通常它更冗长,更难更改。

使用您的变量名称取得一些自由,在您的示例中,值为tmp_list