Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中迭代字符串(3)_Python_String_Python 3.x - Fatal编程技术网

在Python中迭代字符串(3)

在Python中迭代字符串(3),python,string,python-3.x,Python,String,Python 3.x,:编写一个名为foldStrings(string1,string2)的函数,该函数接受两个字符串作为参数。如果 这两个字符串长度相等,函数返回一个字符串,该字符串由两个字符串中的每个字符交替组成。如果两个字符串的长度不相等,则函数返回字符串“两个字符串不相等” 长度相等。” 例如,>>>折叠字符串(“abc”、“def”) 应返回字符串“adbecf”和>>>折叠字符串(“a”、“bc”) 应返回字符串“两个字符串的长度不相等” 这就是我到目前为止所做的: def foldStrings(st

:编写一个名为foldStrings(string1,string2)的函数,该函数接受两个字符串作为参数。如果
这两个字符串长度相等,函数返回一个字符串,该字符串由两个字符串中的每个字符交替组成。如果两个字符串的长度不相等,则函数返回字符串“两个字符串不相等” 长度相等。”

例如,>>>折叠字符串(“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): 当计数器 它打印出这样的内容:“S1S2S3S4S5S6A1A2A3A4 A5A6N2N3N4N5N6T1T2T3T4T5T6O1O3O4O5O6S1S2S3S4S5S6” 与此相反:
“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"