2

どうすればこれを入手できますか

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

これに?各タプルの 2 番目の項目は、次のタプルの最初の項目です。

[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)

簡単なケースを 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 に答える