2

我怎么能得到这个

nums = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]

到这个?每个元组的第二项是下一个元组的第一项。

[0, 1, 2, 3, 4, 5, 6, 7, 8]

我做了:

>>> zip(*nums)[0]
(0, 1, 2, 3, 4, 5, 6, 7)

但它给了我除了最后一个元素之外的一切,然后我不得不使用一些糟糕的代码来得到正确的结果,所以我正在寻找一个优雅的解决方案。

4

3 回答 3

5

不知道你的一般情况是什么,但是

[nums[0][0]] + [x[1] for x in nums]

对于你的例子

range(nums[-1][-1] + 1)

也有效,你能描述一下你正在尝试做什么,而不仅仅是给出一个简单的案例吗?

于 2012-04-21T12:06:35.153 回答
4
>>> nums = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
>>> i = iter(nums)
>>> next(i) + tuple(y for x,y in i)
(0, 1, 2, 3, 4, 5, 6, 7, 8)

使用更高效的版本itertools

>>> from itertools import chain
>>> nums = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
>>> i = iter(nums)
>>> list(chain(next(i),(y for x,y in i)))
[0, 1, 2, 3, 4, 5, 6, 7, 8]
于 2012-04-21T12:09:18.493 回答
0
def flatten(E):
    if E in [[], ()]:
        return []
    elif type(E) not in [list, tuple]:
        return [E]
    else:
        return flatten(E[0]) + flatten(E[1:])

def declutter(L):
    s = set()
    answer = []
    for i in L:
        if i not in s:
            s.add(i)
            answer.append(i)
    return answer

>>> nums = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
>>> declutter(flatten(nums))
[0, 1, 2, 3, 4, 5, 6, 7, 8]

希望这可以帮助

于 2012-04-21T12:52:53.717 回答