【问题标题】:How do i 'replace' an array by filling an empty array's elements using pop method from another array?我如何通过使用来自另一个数组的 pop 方法填充一个空数组的元素来“替换”一个数组?
【发布时间】:2020-03-11 02:33:38
【问题描述】:

我正在尝试在 python 中实现一个堆栈,并且正在尝试使用 list 数据结构。如果我想使用 pop 方法通过使用 现有数组 中的元素来“填充”一个空数组,我该怎么办?

# Implementing Stacks in Python through the given list structure


practiceStack = []

practiceStack.append(['HyunSoo', 'Shah'])
practiceStack.append('Jack')
practiceStack.append('Queen')
practiceStack.append(('Aces'))

# printing every element in the list/array
for i in practiceStack:
    print(i)

# since stacks are LIFO (last in first out) or FILO (first in last out), the pop method will remove the first thing we did

emptyArrayPop = []

这是我尝试过的(通过使用 for 循环)并不断收到 use integers not list 错误

for i in practiceStack:
    emptyArrayPop[i].append(practiceStack.pop)

print(emptyArrayPop)

【问题讨论】:

  • 你的意思是practiceStack.pop()
  • 没有这样的错误信息。

标签: python arrays list stack


【解决方案1】:

pop 函数是一个函数,而不是一个值。换句话说,practiceStack.pop 是一个指向函数的指针(在你花更多时间处理代码之前,你可以忽略它);你可能想要这个:

practiceStack.pop()

你还需要追加到列表;使用append添加内容时,列表会自动添加到末尾;您不需要提供索引。

进一步说明:List.append 方法将获取您传递给它的值并将其添加到 List 的末尾。 例如:

A = [1, 2, 3]
A.append(4)

A 现在是 [1, 2, 3, 4]。如果您尝试运行以下命令:

A[2].append(4)

...那么您实际上是在说,“将 4 附加到 A 中位置 2 处的值的末尾”,(在上面的示例中,`A[2] 设置为 3;请记住,python 列表从 0 开始计数,或者是“0-index”。)这就像说“将 4 追加到 3”。这没有任何意义;将一个整数附加到另一个整数上没有任何意义。

相反,您想附加到 LIST 本身;您不需要指定位置。

不要将这与为列表中的位置分配值混淆;如果您在列表的现有位置设置值,则可以使用 = 运算符:

>>> B = [1, 2, 3]
>>> B[2]
3
>>> B[2] = 4
>>> print(B)
[1, 2, 4]
>>> B.append(8)
>>> print(B)
[1, 2, 4, 8]

所以要回答你原来的问题,你想要的行如下:

emptyArrayPop.append(practiceStack.pop())

(注意[i] 已被删除)


[编辑]正如@selcuk 指出的那样,这不是唯一的问题。

您还需要修复访问 practiceStack 列表中数据的方式,因为您在迭代列表时无法编辑列表(调用 pop 会就地修改列表)。

您需要遍历列表的整数索引才能访问practiceStack 的元素:

for i in range(len(practiceStack)):
    emptyArrayPop.append(practiceStack.pop())

【讨论】:

  • 你试过运行这个吗?
  • 我实际上根本不听你的回答。我没有参加任何算法课程,我只是在观看一个关于递归的 youtube 视频,其中涉及堆栈,所以我并没有真正遵循你的意思。你能更慢/详细地解释你的解释吗?喜欢提供更多上下文?你是什​​么意思指向这个函数的指针?你是什​​么意思追加到列表中并且不需要索引?迭代列表时无法编辑列表是什么意思?
  • 我现在会忽略“指针”的定义(尽管将它添加到您的学习队列中是一个很好的概念!我现在将在我的答案中添加更多解释。
  • 什么鬼?我将 for 循环更改为 for i in practiceStack: emptyArrayPop.append(practiceStack.pop) 并收到此消息:[, , , ]
  • @j6m8 你明白我为什么收到这条消息吗?我没有做你做的事吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2021-05-19
相关资源
最近更新 更多