Python:循环从最终项开始,以第一项结束

时间:2012-03-01 11:17:26

标签: python

是否有任何“pythonic方式”告诉python在从最后一项开始到第一项结束的字符串(或列表)中循环?

例如单词Hans我希望python读取或排序为snaH

接下来,我怎么能告诉pyhon以下内容:现在从你产生的字符串中,搜索'a'找到它,如果你发现'n'跟在'a'之后,把'。'在'n'之后然后打印原始的字母顺序

3 个答案:

答案 0 :(得分:8)

最清晰,最pythonic的方法是使用reversed()内置。

wrong_way = [1, 2, 3, 4]
for item in reversed(wrong_way):
    print(item)

给出了:

4
3
2
1

这是最好的解决方案,因为它不仅可以自然地生成反向迭代器,而且如果它存在,它也可以调用专用的__reversed__()方法,从而允许在某些对象中进行更有效的反转。

您可以使用wrong_way[::-1]来反转列表,但这在代码中的可读性要低得多,而且可能效率较低。但是,它确实显示了列表切片的强大功能。

请注意reversed()提供迭代器,所以如果你想用字符串做这个,你需要将结果转换回一个字符串,幸运的是,你很容易就像:

"".join(iterator)

e.g:

"".join(reversed(word))

str.join()方法接受一个迭代器,并使用调用字符串作为分隔符将每个元素连接成一个字符串,所以在这里我们使用空字符串将它们背对背放置。

答案 1 :(得分:0)

这个怎么样?

>>> s = "Hans"
>>> for c in s[::-1]:
        print c

s
n
a
H

或者,如果你想要一个与第一个相反的新字符串,试试这个:

>>> "".join(reversed("Hans"))
'snaH'

答案 2 :(得分:0)

当然,只需使用list_name [:: - 1]。 e.g。

>>> l = ['one', 'two', 'three']
>>> for i in l[::-1]:
...   print i
... 
three
two
one