gpt4 book ai didi

Python:在最右嵌套列表的末尾添加一个值

转载 作者:太空狗 更新时间:2023-10-30 02:23:10 26 4
gpt4 key购买 nike

我想做的是,给定一个包含任意数量的其他嵌套列表的列表,递归地向下遍历嵌套列表中的最后一个值,直到达到最大深度,然后将一个值附加到那个 list 。举个例子可能会更清楚:

>>> nested_list1 = [1, 2, 3, [4, 5, 6]]
>>> last_inner_append(nested_list1, 7)
[1, 2, 3, [4, 5, 6, 7]]

>>> nested_list2 = [1, 2, [3, 4], 5, 6]
>>> last_inner_append(nested_list2, 7)
[1, 2, [3, 4], 5, 6, 7]

以下代码有效,但对我来说似乎过于棘手:

def add_to_inner_last(nested, item):
nest_levels = [nested]
try:
nest_levels.append(nested[-1])
except IndexError: # The empty list case
nested.append(item)
return
while type(nest_levels[-1]) == list:
try:
nest_levels.append(nest_levels[-1][-1])
except IndexError: # The empty inner list case
nest_levels[-1].append(item)
return
nest_levels[-2].append(item)
return

我喜欢它的一些地方:

  • 有效
  • 它处理列表末尾的字符串和空列表的情况

我不喜欢它的一些地方:

  • 我必须检查对象的类型,因为字符串也是可索引的
  • 索引系统感觉太神奇了——我明天就看不懂了
  • 使用附加到引用列表会影响所有引用这一事实感觉太聪明了

我有一些关于它的一般问题:

  • 起初我担心附加到 nest_levels 会占用空间,但后来我意识到这可能只是一个引用,并没有创建新对象,对吧?
  • 这段代码纯粹是产生副作用的(它总是返回None)。我应该担心吗?

基本上,虽然这段代码有效(我认为...),但我想知道是否有更好的方法来做到这一点。更好的意思是更清晰或更pythonic。可能有更明确的递归?我无法定义停止点或在不产生副作用的情况下执行此操作的方法。

编辑:

需要说明的是,这个方法还需要处理:

>>> last_inner_append([1,[2,[3,[4]]]], 5)
[1,[2,[3,[4,5]]]]

和:

>>> last_inner_append([1,[2,[3,[4,[]]]]], 5)
[1,[2,[3,[4,[5]]]]]

最佳答案

这个怎么样:

def last_inner_append(x, y):
try:
if isinstance(x[-1], list):
last_inner_append(x[-1], y)
return x
except IndexError:
pass
x.append(y)
return x

关于Python:在最右嵌套列表的末尾添加一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com