我是你的世界的初学者。我见过许多人试图用奇特的内置函数来回答这个问题,并且已经找到了关于如何做到这一点的答案上千次,但没有一次使用两个for循环的方法。在
我希望代码在字符串中找到一个元音时,使用two for loop方法只反转一个元音。在
我编写了一些似乎不起作用的代码,但我不太明白为什么
for x in newWord:
for y in vowels:
if x == y:
newWord[x] = newWord[7]
print newWord
元音是元音的列表,newWord也是一个列表。在
这段代码目前无法正常工作,就像大多数尝试过two-for-loop方法的人一样。感谢任何帮助。谢谢
这段代码应该可以在不使用任何“花哨的内置函数”的情况下解决您的问题。在
大致上,您要使用的方法是对字符列表进行两次遍历。在第一个过程中,你会找到每个元音的索引,建立一个要完成的工作列表(要交换的元音的位置)。在
然后通过匹配第一项和最后一项来准备工作列表,直到工作列表中剩下的项目少于两项。(元音的奇数意味着中间的那个不必与任何东西交换)。在
现在只需迭代工作列表、元组/索引对。交换每个对的第一个偏移量处的字符与另一个偏移量处的字符。完成。在
(这是假设您希望将列表转换到位。如果不是,那么您可以从一个副本开始:
new_word = word[:]
,或者迭代enumerate(word)
,并有条件地在每个点附加字符(如果偏移量不在工作列表中)。。。或附加偏移字符(如果此索引与列表中的某个匹配)。在后一种情况下,你可以把你的工作清单改成字典)。在下面是要演示的代码:
这确实使用了列表理解、zip()和reversed()内置函数、zip()的第一个参数的复杂切片以及用于交换变量的Python元组打包习惯用法。因此,您可能需要用更详细的构造来替换它们,以满足您的“不需要复杂的内置”约束。在
然而,从根本上讲,列表理解只是围绕着一个for循环的语法糖。因此,总的来说,这演示了在数据上使用两个for循环的方法。当我返回数据的副本作为我的结果时,没有这个代码也可以工作。(这就是为什么我在第七行使用元组打包习惯用法(就在return语句之前)。在
如果这个问题是在面试中提出的,我有理由相信这将是一个相当好的答案。您可以很容易地分解如何实现zip,如何将列表理解扩展到传统的for套件(block),并且在返回副本时交换行可以是两个独立的赋值,而不是对数据执行就地转换。在
这些变量名非常冗长。但这是为了让你的意图特别清楚。在
相关问题 更多 >
编程相关推荐