Python 中列表项的通用反转
>>> 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]