使用函数式Python反转列表中的每个iterable

使用函数式Python反转列表中的每个iterable,python,Python,我有一个字符串和列表的列表。我想使用map反转列表中的每个iterable。我当前的设置如下: forwards_list = [ 'abc', 'def', [1, 2, 3, 4, 5], ] def reverse(item): object_type = type(item) return object_type(reversed(item)) backwards_list = list(map(reverse, forwards_list)) print(bac

我有一个字符串和列表的列表。我想使用
map
反转列表中的每个iterable。我当前的设置如下:

forwards_list = [
  'abc',
  'def',
  [1, 2, 3, 4, 5],
]

def reverse(item):
  object_type = type(item)
  return object_type(reversed(item))

backwards_list = list(map(reverse, forwards_list))
print(backwards_list)
输出:

['<reversed object at 0x000000000A29A5C0>',
'<reversed object at 0x000000000A29A5C0>',
[5, 4, 3, 2, 1]]
['cba', 'fed', [5, 4, 3, 2, 1]]
问题似乎是
list(reversed([])
返回
[]
,而
str(reversed('')
返回
''

。有人能帮忙吗?

如果您只满足于处理序列,您可以使用切片而不是反向

def reverse(item):
    return item[::-1]
通常,序列在切片时将返回同一时间的对象:

>>> 'foo'[::-1]
'oof'
>>> ['foo', 'bar', 'baz'][::-1]
['baz', 'bar', 'foo']
>>> ('foo', 'bar', 'baz')[::-1]
('baz', 'bar', 'foo')
但是,有几种类型肯定不起作用(例如,
dict
)。但是,
reversed
也需要序列(或具有方法的对象)


当然,即使这样也不会一直(大部分?)起作用,因为没有规则(甚至惯例)规定对象的构造函数必须接受从该类型的另一个实例生成的反向迭代器:0)。

如果您只满足于处理序列,您可以使用切片而不是
反向

def reverse(item):
    return item[::-1]
通常,序列在切片时将返回同一时间的对象:

>>> 'foo'[::-1]
'oof'
>>> ['foo', 'bar', 'baz'][::-1]
['baz', 'bar', 'foo']
>>> ('foo', 'bar', 'baz')[::-1]
('baz', 'bar', 'foo')
但是,有几种类型肯定不起作用(例如,
dict
)。但是,
reversed
也需要序列(或具有方法的对象)


当然,即使这样也不会一直(大多数?)起作用,因为没有规则(甚至惯例)规定对象的构造函数必须接受从该类型的另一个实例生成的反向迭代器:0)。

还没有足够的代表进行注释,但请尝试以下位置:混合不同类型的内容(字符串和列表)在同一个列表中几乎总是一个坏主意。这使得它们很难使用,你可能一开始就把它们分开了。还没有足够的代表发表评论,但试试这个位置:在同一个列表中混合不同种类的东西(字符串和列表)几乎总是一个坏主意。这使他们普遍难以合作,你可能一开始就把他们分开了。