从一个列表的列表中提取

4

在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
你需要哪些列表的部分? - Chris Laplante
我想获取“all_list”列表中每个元素的第三和第四位数字。抱歉,不知道如何更好地解释这个问题。 - DGT
3个回答

6
您可以使用嵌套列表推导式来实现。(这假设您想要从每个字符串中获取最后两个“分数”):
[[tuple(l.split()[-2:]) for l in list] for list in all_list]

3

如果你填入mylist的值,它几乎可以直接使用-目前它是未定义的。

提示:在字符串上使用split函数将其拆分为组件,然后您可以用结果填充mylist。

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


2

补充 eruciforms 回答

首先,你不需要为 all_list 列表生成索引。你可以直接对其进行迭代:

for list in all_lists:
    for item in list:
        # magic stuff

第二点,您可以通过拼接列表使字符串分割更加简洁:

values = item.split()[-2:] # select last two numbers.

通过使用map或列表推导进一步缩小范围;你可以在飞行中将所有项目变成浮点数:

# 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展示的那样
当然,你也可以手动索引结果并创建元组,但通常更冗长,更难更改。 在你的变量名称上做了一些自由处理,值将在你的示例中为tmp_list

很好的解释。另外,谢谢你提醒我默认分割符是空格。 - Sam Dolan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接