使用列表进行排序

时间:2012-11-12 18:24:53

标签: python sorting

nonpalidrome=[]
for word in lowers:
    if len(word)>=7:
        if word[2:-2:1]==word[2:-2:-1]:
            if word[1]!=word[-1]:
                nonpalidrome.append(word)

这是我到目前为止所要做的是:

  

通过过滤下级列表,创建满足的单词列表   以下所有三个条件,打印列表时   完成:

     

这个词至少有7个字符;在这个词的中间,   跳过第一个和最后一个字母,是一个回文(同样向前)   向后);这个词本身不是回文。

我觉得我非常接近......我缺少什么

2 个答案:

答案 0 :(得分:1)

由于您的问题是结果列表为空,这意味着您的某个条件无效:

if len(word)>=7:

if word[2:-2:1]==word[2:-2:-1]:

if word[1]!=word[-1]:

我要尝试的第一件事是在每个语句之后添加print语句来缩小问题范围:

nonpalidrome=[]
for word in lowers:
    print("Got word " + word)
    if len(word)>=7:
        print("len(word) >= 7")
        if word[2:-2:1]==word[2:-2:-1]:
            print("word[2:-2:1]==word[2:-2:-1]")
            if word[1]!=word[-1]:
                print("word[1]!=word[-1]")
                nonpalidrome.append(word)

现在您可以查找未显示的打印语句,并且您将知道哪个if语句没有达到预期效果。

顺便说一下,你的代码要比它需要的复杂得多。为什么不循环遍历字符串而不是比较像1和2这样的硬编码索引?

答案 1 :(得分:0)

尝试这样的事情:

for word in lowers :
   if len(word) >=7 and word[1:-1] == word[1:-1][::-1] and word [0] != word[-1]:
       nonpalindrome.append(word)

使用[1:-1]获取单词的中间部分,使用[::-1]获取反向字符串以匹配是否为回文:

In [172]: word='ballooned'

In [173]: word[1:-1] 
Out[173]: 'alloone'

In [174]: word[1:-1][::-1]
Out[174]: 'enoolla'

In [175]: word[::-1]
Out[175]: 'denoollab'

或使用列表理解:

non_palindrome=[x for x lowers if len(x)>=7 and x[1:-1]==x[1:-1][::-1] and x[0] != x[-1] ]