【问题标题】:Looping the list to get the last item present in the list循环列表以获取列表中存在的最后一项
【发布时间】:2021-06-23 22:48:44
【问题描述】:

我想在循环完成运行时最后在列表中获取单个项目,

word = 'DOOR'
# so the length of word is 4

actual_list = ['A', 'B', 'C', 'D', 'E', 'F']

在这里,我想用变量word 的长度在actual_list 上运行一个循环,当循环完成时,它会显示列表中存在的最后一项。当我用笔和纸解决这个问题时,我得到了 E 的项目,它没有被循环删除。这段代码我也试过了,但是没能成功得到结果,

word = 'DOOR'
print(len(word))

actual_list = ['A', 'B', 'C', 'D', 'E', 'F']

for w in actual_list[:]:
    if len(actual_list) > 1:
        del actual_list[len(word)-1]
        print(actual_list)

说明:
循环删除列表中的第 4 个项目,并且在第一个项目被删除后,循环将再次从下一个项目运行,
示例:第一个循环后['A', 'B', 'C', 'E', 'F'],第二个循环后['A', 'C', 'E', 'F'],第三个循环后['C', 'E' ,'F'],第四个循环后['E', 'F'],第五个循环后['E'] 同样,循环继续它从下一个运行删除最后一项的位置。
当我运行上面的代码时,它说索引超出范围,我已经在这里卡了将近 4 天。 我想要的结果是,

# The last item in the list
['E']

谁能解决这个问题?

【问题讨论】:

  • 如果单词或其长度不会改变,循环不会总是删除索引 3 处的列表项吗?在第一次运行时它将删除 D,在第二次 F 期间,您可能会在第三次循环期间收到异常,因为在索引 3 处找不到更多元素。您能否解释一下为什么会在第二个循环中删除字母“B”?
  • 是的,你的问题是对的,索引会超出范围。这里的过程是,在删除第一个项目“D”后,循环将继续从放置在先前删除的项目“E”之后的项目运行(“E”放置在“D”之后),所以循环将从'D'之后的'E'开始,因此它将从'E'中删除下一个第4个出现的项目,即'B'('E'中的第4个项目),同样它运行直到它得到列表中的单个项目。

标签: python loops if-statement conditional-statements iteration


【解决方案1】:

模数数学可用于循环遍历list,而pop 可用于在每次遍历时删除目标索引处的元素。最后,递归可用于重复这些步骤,直到列表减少到一个元素。

例子:

actual_list = ['A', 'B', 'C', 'D', 'E', 'F']
word = "DOOR"

def reduce_list(one_list, step, index=0):
    if len(one_list) == 1:
        return one_list[0]
    else:
        pop_index = (index + step) % len(one_list)
        one_list.pop(pop_index)
        print(one_list)
        return reduce_list(one_list, step, pop_index)

print(reduce_list(actual_list, len(word) - 1))

输出:

['A', 'B', 'C', 'E', 'F']
['A', 'C', 'E', 'F']
['C', 'E', 'F']
['E', 'F']
['E']
E

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2018-02-15
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多