使用 list.pop() 反转列表的问题
我正在编写一个小代码片段来使用列表追加和弹出来反转字符串。
我编写的脚本如下:
someStr = raw_input("Enter some string here:")
strList = []
for c in someStr:
strList.append(c)
print strList
reverseCharList = []
for someChar in strList:
reverseCharList.append(strList.pop())
print reverseCharList
当我输入字符串abcd时,返回的输出是[d,c]。
我知道我正在改变我正在迭代的列表,但有人可以解释为什么字符“a”和“b”没有显示在此处吗?
谢谢
I was working on writing a small code snippet to reverse a string using list appends and pop.
The script that I wrote is as follows:
someStr = raw_input("Enter some string here:")
strList = []
for c in someStr:
strList.append(c)
print strList
reverseCharList = []
for someChar in strList:
reverseCharList.append(strList.pop())
print reverseCharList
When I enter a string abcd, the output that's returned is [d,c].
I know I am mutating the list I am iterating over but can somebody explain why the chars 'a' and 'b' is not displayed here?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
简单地反转字符串怎么样?
在你的代码上:
请参阅以下内容。由于您正在使用迭代器(for .. in ..)。
您可以直接查看迭代器详细信息以及改变列表如何与迭代器混淆。
How about a simple reversal of string.
On your code:
See the following. Since you are using iterator (for .. in ..).
You can see the iterator details directly and how mutating the list messes up with iterator.
本质上是相同的:
第一次迭代 i 是 0,len(strList) 是 4,然后 pop+append 'd'。
第二次迭代 i 是 1,len(strList) 是 3,然后 pop+append 'c'。
第三次迭代 i 是 2,len(strList) 是 2,因此循环条件失败,您就完成了。
(这实际上是通过列表上的迭代器完成的,而不是局部变量“i”。为了清楚起见,我以这种方式展示了它。)
如果您想操纵正在迭代的序列,通常最好使用 while环形。例如:
Is essentially the same as:
First iteration i is 0, len(strList) is 4, and you pop+append 'd'.
Second iteration i is 1, len(strList) is 3, and you pop+append 'c'.
Third iteration i is 2, len(strList) is 2, so the loop condition fails and you're done.
(This is really done with an iterator on the list, not a local variable 'i'. I've shown it this way for clarity.)
If you want to manipulate the sequence you're iterating over it's generally better to use a while loop. eg:
当您弹出时,您会缩短列表。
You shorten the list when you pop.
一个简单的递归版本:
当然,
[].reverse()
更快。A simple recersive version:
Of course,
[].reverse()
is faster.