首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环使用公共前缀时,我如何以不同的方式获得值?

在循环使用公共前缀时,我如何以不同的方式获得值?
EN

Stack Overflow用户
提问于 2022-11-26 02:05:50
回答 1查看 27关注 0票数 0
代码语言:javascript
复制
strs = ["cir","car"]
#strs = ["flower","flow","flight"]
def get_min_str(lst):
    return min(lst, key=len)
str1 = get_min_str(strs)

lens = len(strs)
x = ""
mlen = len(str1)

if(lens == 1):
    print(strs[0])

for i in range(0, mlen):
    for j in range(0, lens-1):

       

        if( strs[j][i] == strs[j+1][i] ):
            if(j == lens-2):
                x = x +  strs[j][i]
            print(strs[j][i])
        else:
            break
        print(strs[j][i] == strs[j+1][i])
            
       


print(x)

因此,为了找到最长的公共前缀,我使用了两个循环。遍历这些值。但是在这个例子中,strs = "cir","car“。我应该值x= "c“,但我没有得到值"cr",因为我使用了中断函数。函数应该在c处停止。为什么不是?为什么我要得到"cr"your text的值?

EN

回答 1

Stack Overflow用户

发布于 2022-11-26 02:10:23

因为有两个嵌套循环,所以break关键字只退出内环。然后,第三个字母匹配,因此r被添加到x中。要解决这个问题,应该在退出外部循环时设置一个变量,并在每次迭代之前检查它。

编辑:另外,出于可读性的考虑,您可能需要探索enumerate()函数,它将可迭代(如字符串)转换为表单(index, value)的元组的可迭代性,因此您的代码可能如下所示:

代码语言:javascript
复制
should_break = False

for letter_index, current_character in enumerate(str1):
    if should_break:
        break
    for str_index in range(0, lens):
        if strs[str_index][letter_index] != current_character:
            should_break = True  # set break condition for outer loop
            break  # break from inner loop
    else:   # executed when the for loop doesn't break
        x += current_character
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74579225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档