1

目前我有以下列表:

>>> a = list()
>>> b = [1, 2, 3]
>>> c = [4,5,6]
>>> d = [7, 8]
>>> a.append(b)
>>> a.append(c)
>>> a.append(d)
>>> del b, c, d
>>> print a
[[1, 2, 3], [4, 5, 6], [7, 8]]
  1. 我想获得 b、c 和 d 上的第一项(值 1、4 和 7)。我怎么能在一行代码中做到这一点?
  2. 我想获得 b、c 和 d 上的剩余项目(值 2、3、5、6 和 8)。我怎么能在一行代码中做到这一点?
4

4 回答 4

2
>>> zip(*a)[0]
(1, 4)

zip(*a)就像一个转置函数。

>>> zip(*a)
[(1, 4), (2, 5), (3, 6)]

[0]索引第一个元素。

>>> zip(*a)[0]
(1, 4)

第二个问题更棘手 -zip不会成功。相反,您需要一个列表理解。

>>> [i for l in a for i in l[1:]]
[2, 3, 5, 6, 8]

或者,如果您不需要扁平列表,只需:

>>> [l[1:] for l in a]
[[2, 3], [5, 6], [8]]
于 2013-02-25T10:45:14.747 回答
1

这应该可以解决问题:

[lst[0] for lst in a]

它遍历 a 并为每个元素(这是一个列表)收集第一个值。

于 2013-02-25T10:44:10.733 回答
1

有很多方法可以做到这一点。这将是一个:

>>> print [x[0] for x in a]
[1,4]

或者将 print 放在 for 循环中:

>>> for x in a: print x[0],
1 4

如果您只想要前两个子列表的第一个元素,最基本的方法是:

>>> print a[0][0], a[1][0]
1 4
于 2013-02-25T10:44:32.653 回答
1

我会选择 niklas B. answer zip(b,c)[0],但是,为了给您更多的灵活性,如果您不知道列表中子列表的数量,您也可以尝试:

[el[0] for el in a]

并为您提供 a 的子列表中的所有第一项。

于 2013-02-25T10:45:41.793 回答