想了解Python中某些代码行的含义吗

想了解Python中某些代码行的含义吗,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我遇到了经典的算法问题,最长回文子串,其中必须从给定字符串中提取最长回文子串,我看到了这个非常简单的暴力解决方案,但我不认为我完全理解它的语法 def longestPalindrome( s): longest = “” for i in range(len(s)): for j in range(len(s),i,-1): if s[i:j] == s[i:j][::-1]: if len(longest

我遇到了经典的算法问题,最长回文子串,其中必须从给定字符串中提取最长回文子串,我看到了这个非常简单的暴力解决方案,但我不认为我完全理解它的语法

def longestPalindrome( s):
    longest = “”
    for i in range(len(s)):
        for j in range(len(s),i,-1):
            if s[i:j] == s[i:j][::-1]:
                if len(longest) < len(s[i:j]):
                    longest = s[i:j]
    return longest
def最长回文:
最长=“”
对于范围内的i(len(s)):
对于范围内的j(len(s),i,-1):
如果s[i:j]==s[i:j][::-1]:
如果len(最长)
从我收集到的信息来看,它通过比较给定字符串中的所有子字符串的大小并找到最大的子字符串来检查它们是否都是回文。我的问题涉及具体的方面,我想了解实际发生了什么

        for j in range(len(s),i,-1):
            if s[i:j] == s[i:j][::-1]:
                if len(longest) < len(s[i:j]):
                    longest = s[i:j]
适用于范围内的j(len(s),i,-1):
如果s[i:j]==s[i:j][::-1]:
如果len(最长)
在第一行中,我知道主字符串的长度上有一个迭代,但是我没有得到“I,-1)”部分。这是什么意思? 在“if len(longest) 提前谢谢

1表示范围内的j(len(s),i,-1):
2如果s[i:j]==s[i:j][::-1]:
3如果len(最长)
第1行: 在
范围
生成器上迭代,从
len(s)
向下
i
,步长
-1
(向后)

第2行:
  • s[i:j]
    :从字符
    i
    到字符
    j
  • s[i:j][::-1]
    步长为
    -1
    的子字符串(向后)
s[i:j]==s[i:j][::-1]
s
i
j
的子串与
s
j
i
的反向子串进行比较。这是实际的回文检测。回文不会保存到变量

第3行和第4行: (只有在第2行找到plindrome时,才会执行这些命令)
检查当前最长回文是否比刚找到的回文短,如果短,则将新回文写入范围(len(s),i,-1)内j的
longest
变量中: 2如果s[i:j]==s[i:j][::-1]: 3如果len(最长) 第1行: 在
范围
生成器上迭代,从
len(s)
向下
i
,步长
-1
(向后)

第2行:
  • s[i:j]
    :从字符
    i
    到字符
    j
  • s[i:j][::-1]
    步长为
    -1
    的子字符串(向后)
s[i:j]==s[i:j][::-1]
s
i
j
的子串与
s
j
i
的反向子串进行比较。这是实际的回文检测。回文不会保存到变量

第3行和第4行: (只有在第2行找到plindrome时,才会执行这些命令)

检查当前最长回文是否比刚找到的回文短,如果短,则将新回文写入
最长
变量中

我投票支持@Xtrem532答案,但需要查看它以更好地可视化它

def longestPalindrome( s):
    longest = ''
    for i in range(len(s)):
        for j in range(len(s),i,-1):
            pal = 'NO'
            # print(i,'   :  ',j)
            if s[i:j] == s[i:j][::-1]:
                pal ='YES'
                if len(longest) < len(s[i:j]):
                    longest = s[i:j]
            print('I :', i,' J :',j ,'  :  ',s[i:j], '    ',s[i:j][::-1], '    ', pal,'   ',longest)
    return longest

pippo = longestPalindrome('AATGTGGTCCGTAGTCGTGACCC')

print('\n Longest Palindrome Substring : ', pippo)

我投票支持@Xtrem532答案,但我需要看到它,以便更好地形象化

def longestPalindrome( s):
    longest = ''
    for i in range(len(s)):
        for j in range(len(s),i,-1):
            pal = 'NO'
            # print(i,'   :  ',j)
            if s[i:j] == s[i:j][::-1]:
                pal ='YES'
                if len(longest) < len(s[i:j]):
                    longest = s[i:j]
            print('I :', i,' J :',j ,'  :  ',s[i:j], '    ',s[i:j][::-1], '    ', pal,'   ',longest)
    return longest

pippo = longestPalindrome('AATGTGGTCCGTAGTCGTGACCC')

print('\n Longest Palindrome Substring : ', pippo)

理解其他人的代码不是堆栈溢出的主题。问题是,我们不知道你为什么还不理解它,而且这个网站也不是为与你交流而设计的。你应该尝试一个合适的论坛,比如.print(范围(开始,停止,步骤),这里我假设它是范围(最大,最小,-1)因为您在-1步骤中从大到小进行了尝试,添加开始最长值是空的,而不是假定第一个短回文子序列,然后向上,只有当最长值比给定回文的新值短时,才替换最长值,前提是了解其他人的代码不在堆栈溢出主题中。问题是我们不知道你为什么不理解它,而且这个网站不是为和你交流而设计的。你应该尝试一个合适的论坛,比如.print(范围(开始,停止,步骤),这里我假设它是范围(最大,最小,-1)因为你从大到小的数字在-1步中尝试添加开始最长是空的比假设第一个短回文子序列,然后上升,最长被替换只有当最长是短于新的回文如果上面,非常感谢你花时间!非常说教的解释,有时我I don’我不是有点拘泥于细节,而是因为我想了解代码真正的功能以及如何做,而不仅仅是理解一般意义。谢谢!非常感谢你花时间!非常有教育意义的解释,有时我会拘泥于细节,但这是因为我想理解代码真正的功能以及如何做,而不仅仅是理解一般意义意思是,谢谢!