在Python中,减去列表的第一个和最后一个元素。

3

我有以下列表:

>>> list_of_lists = [[(0, 0)], [(6, 0)], [(7, 0), (8, 0), (9, 0)], [(10, 0)]]

我希望你能够提供以下内容:

>>> substract(list_of_lists)
[6, 1, 1]

基本上我有一个列表的列表。每个列表都是元组的列表。我想从一个列表中最后一个元组的第一个元素中减去后续列表中第一个元组的第一个元素。更具象化的解释如下:
[[(0, 0)], [(6, 0)], [(7, 0), (8, 0), (9, 0)], [(10, 0)]]
6 - 0 = 6
7 - 6 = 1
10 - 9 = 1

我想要的是,在list_of_lists中的一个列表中的元组的第一个元素减去前一个列表中最后一个元组的第一个元素。因此,在substract(list)中发生以下操作:6-0 = 6,7-6 = 1,10-9 = 1,并将结果以列表形式给出。这很令人困惑。 - user334856
4个回答

2
[ll[i][0][0] - ll[i-1][-1][0] for i in xrange(1,len(ll))]

对于i==1,必须按索引搜索列表的第二个和第一个元素。对于i==2,必须按其索引搜索第三个和第二个元素,也就是说,必须对第二个元素进行第二次搜索。依此类推,因此每个元素必须搜索两次。- 然而,我测试了一下,您的解决方案比我的更快,当然是因为它通过索引找到元素所需的时间比在我的代码中执行赋值要少 - 所以我点了个赞 - eyquem

0

怎么样:

In [9]: ll = [[(0, 0)], [(6, 0)], [(7, 0), (8, 0), (9, 0)], [(10, 0)]]

In [10]: first = [l[0][0] for l in ll]

In [11]: last = [l[-1][0] for l in ll]

In [12]: [f - l for (f, l) in zip(first[1:], last[:-1])]
Out[12]: [6, 1, 1]

你首先创建一个对象 first,然后创建另一个对象 last,接着创建第三个对象 **first[1:]**,再创建第四个对象 **last[:-1]**,最后再创建一个对象 **zip(first[1:], last[:-1])]**。这太麻烦了!我测试过了:你的解决方案比我的长25%,而我的解决方案比Squazic的解决方案长20%。 - eyquem

0
li = [[(0, 0)],
      [(6, 0)],
      [(7, 0), (8, 0), (9, 0)],
      [(10, 0)]]
for x in li:
    print x
print

def iti(li):
    a = li[0]
    for b in li[1:]:
        yield b[0][0]-a[-1][0]
        a = b

print list(iti(li))

在这个解决方案中,列表只被迭代了一次(使用b),也就是说每个元素只被分配了一次。
编辑:实际上,每个元素(也就是列表中的对象)首先被分配给 b ,然后再被分配给 a

0

因此,您可以使用索引访问此列表中的列表中的值。从那时起,您现在可以通过调用来访问数字六的第一个实例,

list_of_list[1][0][0]

其中第一个索引指的是列表内的列表,第二个指的是列表内的元组,最后一个则指向元组中的元素。另一个例子可能是访问8,

list_of_list[2][1][0]

从那里开始,您应该能够自己创建一个循环,遍历列表并输出所需的数组。


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