【问题标题】:insert item to list without insert() or append() Python在没有 insert() 或 append() Python 的情况下将项目插入列表
【发布时间】:2020-09-13 00:11:50
【问题描述】:

我一直在尝试处理一项任务的功能,但我是编码新手。其中一部分是通过在没有内置函数的情况下输入所需的项目和索引来使用户将项目插入列表。目前,我有代码来替换该索引中的项目,但我无法让它完成它应该做的事情。

object是item,list在main函数中。

def add(list, obj, index):
    nlist = []
    print("Your list ", list)
    item = input("Insert item: ")
    index = int(input("Index: "))
    i = 0
    for e in list:
        if i < index:
            nlist.append(e)
            i += 1
        elif i == index:
            nlist.append(obj)
            i += 1
        elif i > index:
            nlist.append(e)
            i += 1
    print("Your new list ", nlist)

【问题讨论】:

  • nlist+[e]怎么样
  • 看起来你得到了作为参数传递的对象和索引,所以你可能不应该在这里使用input
  • 说真的,你不能用append?这将迫使您使用其他一些效率较低的方法,这些方法根本不会真正增加理解。
  • 您可以将列表连接成[:index] + 所需项目+ [index:]
  • @juanpa.arrivillaga 除非这是一个人为的练习来教授切片。这仍然是一个糟糕的任务,但如果你想让他们使用切片......

标签: python python-3.x


【解决方案1】:

想象一下,您拥有其中一套磁性火车。喜欢

您想在第二个之后添加一个火车车厢。因此,您将在索引 12 之间拆分火车,然后将其附加。前面是从0到1的所有内容,第二部分是从2到结束的所有内容。

幸运的是,python 有一个非常好的切片语法:x[i:j] 表示从i(包括)到j(不包括)的切片。 x[:j] 表示从前面切到jx[i:] 表示从i 切到最后。

所以我们可以这样做

def add(lst, obj, index): return lst[:index] + [obj] + lst[index:]

【讨论】:

  • 如果你被允许改变列表,lst[x:x] = [obj] 在元素x 之前插入objx = 0 允许您预先添加,lst[-1:](例外)添加。
【解决方案2】:
a = [1,2,3,4,5]
idx = 3
value=[7]

def insert_gen(a,idx,value):
    b=a[:idx] + value + a[idx:]
    return b

final = insert_gen(a,idx,value)
print(final)

【讨论】:

    【解决方案3】:

    用包含对象的列表替换一个空切片:

    lst[index:index] = [obj]
    

    演示:

    >>> for index in range(4):
            lst = [0, 1, 2]
            lst[index:index] = [9]
            print(lst)
        
    [9, 0, 1, 2]
    [0, 9, 1, 2]
    [0, 1, 9, 2]
    [0, 1, 2, 9]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多