- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道我可以只使用 reverse
函数来反转字符串,但是对于 Codecademy 作业,我试图在没有 reverse
或 的情况下反转字符串[::-1]
。在试图找出我的代码有什么问题时,我偶然发现了问题的可能解决方案,但此时,我只想了解我的代码在做什么。
def reverse(text):
text2 = list(text)
backwards = []
for char in text2:
backwards.append(text2[-1])
del(text2[-1])
return "".join(backwards)
text = raw_input("Say something:\n")
print reverse(text)
当我对此进行测试时,输出始终是字符串的后半部分反转。我不明白为什么 for char in text2:
会被解释为 for half_the_char in text2
。我的代码如何解释这种奇怪现象?
最佳答案
您正在遍历列表并从中删除。所以当你到达中间点时,列表的第二部分已经消失,for
循环停止,因为不再有要迭代的项目。
每次迭代都打印出你的列表,你会看到发生了什么:
>>> text2 = list('hello')
>>> backwards = []
>>> for char in text2:
... backwards.append(text2[-1])
... del text2[-1]
... print 'char:', char, 'backwards:', backwards, 'text2:', text2
...
char: h, backwards: ['o'] text2: ['h', 'e', 'l', 'l']
char: e, backwards: ['o', 'l'] text2: ['h', 'e', 'l']
char: l, backwards: ['o', 'l', 'l'] text2: ['h', 'e']
for
循环然后停止,因为左边没有更多的项目可以迭代;遍历索引后 0
, 1
和 2
,列表已缩短到没有索引的地步 3
不再。
你可以使用 while
循环代替:
while text2:
backwards.append(text2[-1])
del(text2[-1])
现在循环仅在 text2
时停止完全是空的。
或者你可以遍历 text
, 其中具有相同的长度和相同的字符;它几乎和你原来的一样毫无意义 for
循环,因为你忽略 char
循环目标相同:
for char in text:
backwards.append(text2[-1])
del(text2[-1])
但是text
至少在循环时不会缩短,因此您的迭代不会过早结束。
或者您可以使用单独的索引 来选择要添加的字符,每次迭代都对其进行调整,然后不从text2
中删除:
index = -1
for character in text2:
backwards.append(text2[index])
index -= 1
现在您将迭代 len(text2)
次。当然,您不需要转换 text
到一个列表,你可以索引到 text
.
关于python - 字符串反转只反转一半的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017992/
我正在尝试将我在本文档中阅读的内容付诸实践: https://sar.informatik.hu-berlin.de/research/publications/SAR-PR-2006-05/SAR-
我一直在尝试编写一个可以改变这个的 terraform 表达式: subnets = { my_subnet_1 = { nsg = "my_nsg_1", ad
我有一个HashMap,它将两个字符串转换为单词,然后将单词添加到 map 中。我拥有它,以便一个键可以指向多个值。现在我想创建一个循环来反转表,以便所有值都指向键。不要为一个指向多个逆值的键而烦恼。
我对 ~ 运算符有点困惑。代码如下: a = 1 ~a #-2 b = 15 ~b #-16 ~ 是如何工作的? 我想,~a 会是这样的: 0001 = a 1110 = ~a 为什么不呢? 最佳
如果执行 ResourceManager.GetString(Key),您可以获取资源中某个项目的值。有没有一种方法可以进行反向查找以从给定值的资源中获取 key (本质上是反翻译)? 最佳答案 您应
我在 R 中编写了一个代码来反转一个数字。但是我得到了 inf作为输出。 digit0){ rev_num=rev_num*10 + digit %% 10 digit=digit / 10 }
这个问题已经有答案了: Invert keys and values of the original dictionary (3 个回答) 已关闭 9 年前。 我正在寻找在 python 上转置一本字
所以我试图反转我当前制作的形状的输出。我想知道我应该扭转这种情况吗?我尝试更改变量“a”和“c”的值,最终陷入无限循环。 class IRT { public static void main
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: PHP mysql_real_escape_string() -> stripslashes() leavi
从 Wordpress 模板中提取一些预先存在的代码来绘制椭圆阴影。阴影呈椭圆形向下辐射。只有椭圆的下半部分可见,从而形成底部阴影效果。 我只是想“反转”椭圆的“阴影效果”,以便只有阴影的顶部 一半可
我有一个函数应该找到两个弧度的中间 function mrad(rb,ra){return (rb+ra)/2;} 但有时,当我用 Math.sin 和 Math.cos 绘制 x 和 y 时,这两个
给定此代码(http://jsfiddle.net/bzf1mkx5/) .intern { -webkit-animation: in 1s 1 reverse forwards; } .i
我对 ~ 运算符有点困惑。代码如下: a = 1 ~a #-2 b = 15 ~b #-16 ~ 是如何工作的? 我想,~a 会是这样的: 0001 = a 1110 = ~a 为什么不呢? 最佳
我需要以相反的顺序从列表中提取项目(从最后一个条目到第一个)。我设法得到了所有元素,但是,从第一个到最后一个。这是我正在使用的部分代码: 该列表位于不同的网站集上。 using (SPSit
由于一些证书问题,我不得不写 ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chai
是否有一个函数接受一个函数列表和一个输入,并输出一个对输入进行操作的函数列表? 所以像 map,但倒退: >>>map(lambda x: 2*x,[1,2,3,4,5,6,7,8,9]) [2, 4
考虑下表团队消息: 15:10 | Peter | I'm off to the store, call my mobile phone if you need me. 15:11 | Susy |
算法如下: int encryption(int a, int b) { short int c, c2; uint8_t d; c = a ^ b; c2 = c;
我正在寻找一种方法来逆转 a CRC32 checksum .周围有解决方案,但它们要么是 badly written , extremely technical和/或 in Assembly .汇编
使用批处理文件,处理所有在文件名或扩展名中共享字符串的文件就足够简单了,例如: FOR /R %F IN (*.EXE) DO @ECHO %F 但是,如果我想反转文件集的含义怎么办?比如,处理所有不
我是一名优秀的程序员,十分优秀!