仅在具有偶数元素的列表上从空列表错误弹出

时间:2016-09-13 19:29:25

标签: python list pop

所以这只是我在codewars.com上为了好玩而做的一项练习。重点是取一个字符串并将其拉出来,取最后一个字符并将其添加到字符串中,取第一个字符并将其添加到另一个字符串,直到您有1(对于具有奇数字母的字符串)或0(对于具有偶数字母的字符串)剩下的字符。如果您有兴趣,可以点击challenge链接。

# function sleep {    -- optional switch-out for the system command
#                        after POSIX & GNU compatibility verified.
function delay {
   emulate -LR zsh -o extendedglob -o nullglob
   local Delay=1.
   if [[ $1 == (#b)([[:digit:]](#c1,).(#c0,1)[[:digit:]](#c0,))(s|m|h|d|w|) ]]
   then
      if [[ $match[2] == (s|) ]] Delay=$match[1]
      if [[ $match[2] == (m) ]] Delay=$[ $match[1] * 60. ** 1 ]
      if [[ $match[2] == (h) ]] Delay=$[ $match[1] * 60. ** 2 ]
      if [[ $match[2] == (d) ]] Delay=$[ ($match[1] * 60. ** 2) * 24 ]
      if [[ $match[2] == (w) ]] Delay=$[ (($match[1] * 60. ** 2) * 24) * 7 ]
      : $(read -u 1 -t $Delay)
   else
      print -u 2 "Invalid delay time: $1"
      return 1
   fi
}

如果字符串有奇数个字符,我的代码会给我正确的结果:

def pop_shift(test):
    firstSol = []
    secondSol = []
    testList = list(test)
    while len(testList) != 1:
        firstSol.append(testList.pop())
        secondSol.append(testList.pop(0))
    return [''.join(firstSol), ''.join(secondSol), ''.join(testList)]

但是由于偶数个字符我得到了这个错误:

['erehtse', 'example', 't']

我查看了一系列涉及pop()方法的问题,但没有任何内容与此类似。我也用各种字符串对它进行了测试,并查看了pop方法的文档。必须有一些我缺少的东西。任何指针都表示赞赏。这也是我的第一个问题,所以如果您还有其他想看的内容,请告诉我。

2 个答案:

答案 0 :(得分:0)

你的循环正在检查列表的长度是否为1;对于偶数长度列表,因为您总是一次弹出2个项目,所以它永远不会看到长度为1。

答案 1 :(得分:0)

而不是while len(testList) != 1,您需要:while len(testList) > 1,因为len(testList)会在“偶数”字符串上从2跳到0

def pop_shift(test):
    firstSol = []
    secondSol = []
    testList = list(test)
    while len(testList) > 1:
        firstSol.append(testList.pop())
        secondSol.append(testList.pop(0))

    return [''.join(firstSol), ''.join(secondSol), ''.join(testList)]

然后:

print(pop_shift("Monkeys"))
> ['sye', 'Mon', 'k']

print(pop_shift("Monkey"))
> ['yek', 'Mon', '']