有没有一种方法可以在每次迭代时将新列表追加到现有列表中?

时间:2020-09-12 03:19:51

标签: python list while-loop scheduling

**有人可以帮我做一个更好的方法吗?

这是我的输出。用户必须输入是否有新流程要输入,如果是,则输入新流程并且必须将其附加到新列表中。改为第一个列表。


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")

2 个答案:

答案 0 :(得分:1)

您的索引变量i每次都从0n-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,因为我们不在乎提供{{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 ...

答案 1 :(得分:0)

这是因为,在每次调用addnew时,您都会添加一个新的空列表,但是随后您将返回第一个列表以添加新数据。您不必处理从0到p[i]的{​​{1}},而只需要处理新列表。拥有所有新数据后, then 将结果列表添加到n的末尾。

p