在Python中迭代字符串(3)
:编写一个名为foldStrings(string1,string2)的函数,该函数接受两个字符串作为参数。如果在Python中迭代字符串(3),python,string,python-3.x,Python,String,Python 3.x,:编写一个名为foldStrings(string1,string2)的函数,该函数接受两个字符串作为参数。如果 这两个字符串长度相等,函数返回一个字符串,该字符串由两个字符串中的每个字符交替组成。如果两个字符串的长度不相等,则函数返回字符串“两个字符串不相等” 长度相等。” 例如,>>>折叠字符串(“abc”、“def”) 应返回字符串“adbecf”和>>>折叠字符串(“a”、“bc”) 应返回字符串“两个字符串的长度不相等” 这就是我到目前为止所做的: def foldStrings(st
这两个字符串长度相等,函数返回一个字符串,该字符串由两个字符串中的每个字符交替组成。如果两个字符串的长度不相等,则函数返回字符串“两个字符串不相等” 长度相等。” 例如,>>>折叠字符串(“abc”、“def”)
应返回字符串“adbecf”和>>>折叠字符串(“a”、“bc”)
应返回字符串“两个字符串的长度不相等” 这就是我到目前为止所做的:
def foldStrings(str1, str2):
newStr = ""
counter = 0
if len(str2) == len(str1):
while counter < len(str2):
for element in str1:
for index in str2:
newStr = newStr + element
newStr = newStr + index
counter += 1
return newStr
else:
return "The two Strings are not equal in length"
def折叠字符串(str1、str2):
newStr=“”
计数器=0
如果len(str2)=len(str1):
当计数器“s1a2n3t4o5s6”您可以通过使用
范围跳过使用计数器变量
def foldStrings(str1, str2):
if len(str1) != len(str2):
return "The two Strings are not equal in length"
# This should really be a raise ValueError("The two Strings are not equal in length")
newStr = ''
for i in range(len(str1)):
newStr += str1[i] + str2[i]
return newStr
这里有一种更简洁的方法来替换for
循环
newStr = ''.join([x for pair in zip(str1, str2) for x in pair])
当需要单个循环时,使用三个嵌套循环会使问题变得不必要的复杂
替换:
while counter < len(str2):
for element in str1:
for index in str2:
newStr = newStr + element
newStr = newStr + index
counter += 1
return newStr
在原始代码中,如果字符串长度为示例6,则代码会显示:
Repeat 6 times:
for every character in str1
for every character in str1
do stuff
因此,do stuff
执行6 x 6 x 6次!您只需要在单个循环中执行6次
你做错的不是python特有的问题,而是算法和逻辑思维的问题。从数学上讲,这个问题建议一次迭代,而你有三次嵌套。在这种情况下,您可能已经手动浏览了代码,或者使用调试器对其进行了逐步调试,以演示此处的思维缺陷。#
#Simple way to do it
def foldStrings(str1, str2):
newStr = ""
counter = 0
if len(str2) == len(str1):
while counter < len(str2):
newStr = newStr + str1[counter] + str2[counter]
counter += 1
return newStr
else:
return "The two Strings are not equal in length"
def折叠字符串(str1、str2):
newStr=“”
计数器=0
如果len(str2)=len(str1):
当计数器
现在,对于str1中的每个元素,它都会查看str2中的所有元素。您只希望它查看str2的下一个元素。str1上的循环只需要1个,而不是str1和str2上的2个循环,因为str1和str2的长度相同。确切地说,我不确定要更改什么,因为我尝试更改了位置。我也尝试过将字符串更改为列表,但如果不完全理解如何迭代字符串,我就无法这样做。顺便说一下,这只是我的comp简介课程中的一个练习作业问题。我正在回顾一些简单的事情,但由于某些原因,我一直在思考如何修复它们。@C.Helling error。抱歉……您重写的for循环是一个很好的替代和更干净的循环……我只是想知道我做错了什么,以及如何以编写结构的方式修复代码。(当我在课程中处理这些小算法时,我先把所有内容都写下来。从逻辑上讲,这在我的头脑中起作用,但它不能很好地转换为Python编程语言。)@srxprime13假设您有两个列表l1
和m
元素,以及l2
和n
元素。如果在l1中对i执行,在l2:print()中对j执行,则最终将得到总共n*m
个打印。这是因为对于l1
中的每个m
元素,您将执行n
打印。这就是为什么在切换第一个字符串之前,第二个字符串中的所有字符都会循环。啊,这现在是有意义的。很抱歉,你们不得不在这么基本的层面上向我解释,但这很有帮助!:)再次感谢!我很欣赏更简洁的版本。Patrick也提供了类似的修复。如果你不介意的话,你能帮我把代码修改成我想要的结构吗?正如在另一篇评论中所说的,我先把这些写在纸上,然后逻辑地计算出来,这似乎在数学上是可行的,但没有很好地翻译成python语言。如果你不能在结构中对我的代码进行修复,那么现在我只是好奇。最好的,Santos@srxprime13:我扩展了答案,并不是说这是一个“更清洁”的解决方案;这是一个数学上一致的解决方案。为本质上的O(n)问题创建一个复杂度为O(n立方)的解决方案是没有意义的。你的尝试毫无意义,无法适应工作;这是不正确的。我真的很感激你的坦率和回应。它帮助了我很多,并且回答了我在练习算法时遇到的一周又一周的问题。我与算法的复杂性作斗争,我将学习更多关于辨别问题和我的想法之间的区别的知识,哈哈!现有的答案已经更简单了,OP评论说,他真正想要的是对他有缺陷的思维的解释,而不仅仅是问题的解决办法。@Pratik Patil:谢谢Pratik,但正如Clifford所说的那样。
#Simple way to do it
def foldStrings(str1, str2):
newStr = ""
counter = 0
if len(str2) == len(str1):
while counter < len(str2):
newStr = newStr + str1[counter] + str2[counter]
counter += 1
return newStr
else:
return "The two Strings are not equal in length"