这里我尝试使用以下逻辑来反转字符串,
st = "This is Ok"
rst = list(st)
rst.reverse()
''.join(s for s in rst)
工作正常,但当我尝试遵循以下逻辑时,我收到错误,
st = "This is Ok"
''.join(s for s in list(st).reverse())
这是一个错误,
----> 1 ''.join(s for s in list(st).reverse())
TypeError: 'NoneType' object is not iterable
请任何人解释上述过程。
答案 0 :(得分:8)
list.reverse
是一个就地操作,因此它会更改列表并返回None
。你应该使用reversed
函数,就像这样
"".join(reversed(rst))
我个人建议像这样使用slicing notation
rst[::-1]
例如,
rst = "cabbage"
print "".join(reversed(rst)) # egabbac
print rst[::-1] # egabbac
答案 1 :(得分:3)
答案 2 :(得分:3)
失败是因为lst.reverse()
反转列表并返回None
(并且您无法迭代None
)。你正在寻找的是(例如)reversed(lst)
,它会从lst
中创建一个新的列表,而这个列表是相反的。
请注意,如果要反转字符串,则可以直接执行此操作(不使用列表):
>>> st = "This is Ok"
>>> st[::-1]
"kO si sihT"
答案 3 :(得分:0)
你试试这个吗?
[x for x in a[::-1]]
[x for x in reversed(a)]
两者都运行良好,但使用[:: - 1]
效率更高min(timeit.repeat(lambda: [x for x in a[::-1]]))
出[144]:0.7925415520003298
min(timeit.repeat(lambda: [x for x in reversed(a)]))
出[145]:0.854458618996432