Python 中列表项的通用反转

4 投票
2 回答
714 浏览
提问于 2025-04-16 09:55
>>> b=[('spam',0), ('eggs',1)]
>>> [reversed(x) for x in b]
[<reversed object at 0x7fbf07de7090>, <reversed object at 0x7fbf07de70d0>]

真遗憾。我原本期待能得到一个反转的元组列表!

当然,我可以这样做:

>>> [tuple(reversed(x)) for x in b]
[(0, 'spam'), (1, 'eggs')]

但我希望能有一些通用的方法?也就是说,当给它一个元组列表时,它能返回一个反转的元组列表;而当给它一个列表列表时,它能返回一个反转的列表列表。

当然,使用isinstance()这种丑陋的黑客方式总是可以的,但我其实希望能避免走那条路。

2 个回答

0

如果你只需要一层深度,可以试试 [x[::-1] for x in mylist]。如果需要更复杂的,就写一个递归函数,比如:

import collections
def recursive_reversed(seq):
    if isinstance(seq, collections.Sequence):
        return [recursive_reversed(x) for x in reversed(seq)]
    return seq

这个函数实际上会把所有的序列都转换成列表,不过我希望你能明白这个意思。

8

这是关于“扩展切片”的内容,具体可以参考这个链接:Extended slicing

[x[::-1] for x in b]

撰写回答