2015-02-13 1 views
-1

У меня есть список с фиксированным размером 10, который я стану процентом процессора моего компьютера с интервалом в 2 секунды. Что я пытаюсь сделать это, удаление 1-й элемент сдвига каждого элемента в предыдущий индекс списка записи 11-го значения в последнем индексе спискаПеремещающиеся элементы в фиксированном размере

Ниже вы можете увидеть мой код. Я сделал некоторую отладку, но сейчас я запутался. Как я могу это исправить?

__author__ = 'tim' 
#-*- coding: utf-8 -*- 
import psutil, os, time 

def getCpuRate(): 
    myList = [None]*10 
    myString=" " 
    myString2 = " " 
    i = 0 
    j = 0 

    while True: 
     if myList[9] is None: 
     myList[i] = psutil.cpu_percent(interval=2) 
     myString = myString + (str(myList[i]) + " ") 
     i = i+1 
     print i , myString 
     #time.sleep(3) 
     else: 
     while i>0: 
      myList[j] = myList[j+1] 
      #print myList[j+1] , myList[j] 
      for k in range(len(myList)): 
       myString2 = myString + (str(myList[k]) + "") 
      print i , j , myString2 
      j = j+1 
      i = i-1 
      if j >= 9: 
       myList[j] = psutil.cpu_percent(interval=2) 
       print i , j , myString2 
       j -= 1 


print "a" 
getCpuRate() 
''' 
mySecondList = getCpuRate() 
for x in range(len(mySecondList)): 
    print mySecondList[x] 
''' 
print "b" 
+0

если у вас есть только 10 элементов, где 11-й вариант подходит? –

+0

Я пытаюсь переписать 2-й, 1-й, 3-й и 2-й и так далее. Как только 10-й элемент скопирован на 9-й, мне нужно, чтобы 11-й был написан над 10-м номером –

+2

, это домашнее задание или вы можете просто использовать deque? 'из коллекции import deque deq = deque (maxlen = 10)' –

ответ

0

Почему бы вам не использовать deque?

Просто введите 10 фиктивных значений, а затем используйте append и pop. Итак, все становится смещено влево. Или вы указываете maxlen=10 (максимальная длина) deque и используете только append.

0

Вместо использования списка вы можете использовать deque (documentation link), который является списком, оптимизированным для операций, которые вы хотите.

import collections 
q = collections.deque() 

# add element at the end: 
q.append('cpu percentage here') 
# add element at the beginning: 
q.appendleft('cpu percentage here') 

# remove first element: 
q.popleft() 
# remove last element: 
q.pop() 

Затем цикл становится намного проще:

import psutil 
import collections 

def getCpuRate(): 
    q = collections.deque(maxlen=10) 
    while True: 
     q.appendleft(psutil.cpu_percent(interval=2)) 
     print(q) 

Обратите внимание, что я упорядочивание так, что мы вводим новые значения в начале и удалить старые в конце. Таким образом, новые значения появляются при печати q. Если вы этого не хотите, вы можете изменить appendleft на append и pop на popleft.

+0

Я уже спросил OP, могут ли они использовать deque, и ответ был * я могу использовать deque, но я просто предпочитаю не делать:) * –