首页 > 解决方案 > 无法删除列表中的最后一项,[-1] 不起作用?

问题描述

第 30 行:'new_2.remove(new_2[-1])' 这意味着删除列表中的最后一个字母(这将是末尾的 's',因为我想删除数字时的 's'在它是'1'之前,因为,你知道,语法。但它删除了第一个's',即使我通过[-1]删除了最后一项。其他一切都在工作,但我不知道为什么它正在删除最后一个's'而不是第一个?!

import random
import time
will = ['No', 'Yes', 'Maybe', 'Probably not', 'Probably', 'Definitely not', 'Definitely']

time_1 = ['1']
time_2 = ['days', 'seconds', 'years', 'weeks', 'minutes', 'months'] 

def listToString(str_in): 
    str1 = "" 
    for x in str_in: 
        str1 += x    
    return str1


print("Enter a question starting\nwith 'when' or 'will' to shake 8 ball\n"
'0 to exit\n')

while True:
  kb_in = input(': ').lower().strip()
  print('\nShaking...\n')
  time.sleep(0.6)
  if kb_in == '0':
    print('bye'); exit()
  elif 'when' in kb_in:
    new = random.choice(time_1)
    if new == '1':
      print(new, end = ' ')
      new_1 = random.choice(time_2)
      new_2 = list(new_1)
      new_2.remove(new_2[-1])  # not taking last 's' out of 'seconds' ??
      print(listToString(new_2), '\n')
    else:
      print(f'{new} {random.choice(time_2)}\n')
  elif 'will' in kb_in and 'when' not in kb_in:
    print(random.choice(will))
  else:
    print("\nInput does not contain 'will' or 'when'\n")

标签: python

解决方案


list.remove删除第一次出现的值。

所以要实现你想要的,你可以替换

new_2.remove(new_2[-1])

new_2 = new_2[:-1]

这会将列表分成倒数第二个值。

你也可以做

new_2.pop()

这将删除列表的最后一个值。


推荐阅读