【问题标题】:Is there a way through which I can append the new list into the existing list on each while iteration?有没有一种方法可以在每次迭代时将新列表附加到现有列表中?
【发布时间】:2026-01-30 09:30:01
【问题描述】:

**有人可以帮我找到更好的方法吗?

这是我的输出。用户必须输入他是否有要输入的新进程,如果是,则输入新进程,并且它必须附加到新列表中。但在我的情况下,在每次新的迭代之后,它都会被附加改为第一个列表。


Enter process name: 1
Enter process Arrival Time: 3
Enter Execution Time: 2

[['1', 3, 2]]
Enter process name: 2
Enter process Arrival Time: 4
Enter Execution Time: 3

[['1', 3, 2], ['2', 4, 3]]
enter new processy
ENTER TOTAL NUMBER OF PROCESSES: 1
Enter process name: 3
Enter process Arrival Time: 2
Enter Execution Time: 3

[['1', 3, 2, '3', 2, 3], ['2', 4, 3], []]
enter new process

----------------------------------------------
>This is my code 

a = 0
#p = [['p1', 0, 2], ['p2', 1, 2], ['p3', 5, 3], ['p4', 6, 4]]
a2 = [0]
completion_time=[]
pp = []
tat=[]
waiting_time=[]
p = []
total_wtime = 0
n=0

def addnew():
    n = int(input('ENTER TOTAL NUMBER OF PROCESSES: '))
    for i in range(n):
        p.append([])
        p[i].append(input('Enter process name: '))
        p[i].append(int(input('Enter process Arrival Time: ')))

        p[i].append(int(input('Enter Execution Time: ')))
        print('')
        print(p)

ans="y"
while(ans=="y"):
    addnew()
    ans = input("enter new process")

【问题讨论】:

  • 在你循环遍历列表时,有时会很想改变它;但是,创建一个新列表通常更简单、更安全。请参阅(循环技术)[docs.python.org/3/tutorial/… 永远不要在迭代列表时更改它。
  • 感谢您的关注!在我之后你得到了一个更好的答案,并且不厌其烦地切换了“最佳答案”选项。这将对未来的 Stack Overflow 用户有所帮助。

标签: python list while-loop scheduling


【解决方案1】:

您的索引变量i 每次都从0 循环到n-1,即使您在现有列表中添加元素也是如此。

按照 Prune 的建议,最好的方法可能只是将新元素添加到新列表中,然后附加它。但是,如果您正在寻找对现有代码的最小更改,请更改以下行:

    for i in range(n):

    for i in range(len(p), len(p) + n):

这将确保当您再次调用 addnew 时,索引会继续从您上次中断的地方开始,而不是再次从 0 开始。


如果您确实决定采用附加到新列表的方法(请参阅 Prune 的答案),那么您可以考虑进行额外的更改,因为您的变量 i 将不再是在循环内部使用,将调用它_ 而不是i,因为这是虚拟变量的常规命名。这不适用于您现有的代码,因为您正在使用它来索引 p


这也是另一种选择......

您可以将 p[i] 更改为 p[-1](即 last 元素),无论它出现在哪里。然后你的循环变量只是一个虚拟变量,它也可以像现在一样从0循环到n-1,因为我们不关心n迭代提供的值是什么。

    for _ in range(n):
        p.append([])
        p[-1].append(input('Enter process name: '))
        p[-1].append(int(input('Enter process Arrival Time: ')))
        # ... etc ...

同样,这只是对现有代码进行最小更改的建议。最干净的方法仍然是newlist

【讨论】:

    【解决方案2】:

    这是因为,在每次调用 addnew 时,都会追加一个新的空列表,但随后会返回第一个列表以追加新数据。您不必从 0 到 n 访问 p[i],而只需处理新列表。获得所有新数据后,然后将生成的新列表附加到 p 的末尾。

    def addnew():
        n = int(input('ENTER TOTAL NUMBER OF PROCESSES: '))
        for i in range(n):
            newlist = []
            newlist.append(input('Enter process name: '))
            newlist.append(int(input('Enter process Arrival Time: ')))
    
            newlist.append(int(input('Enter Execution Time: ')))
            print('')
            print(newlist)
        p.append(newlist)
    

    【讨论】:

      最近更新 更多