固定尺寸lis中的移位元件

2024-10-05 14:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个固定大小为10的列表,我会把我的计算机CPU%的间隔2秒。我想做的是, 拆卸第一个元件 将每个元素移到列表的前一个索引中 记录列表最后一个索引的第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"

Tags: none列表iftimecpupsutilprintpercent
2条回答

你为什么不用deque?你知道吗

只需填写10个伪值,然后使用appendpop。所以所有的东西都向左移动。或者指定deque的maxlen=10(最大长度)并仅使用append。你知道吗

您可以使用dequedocumentation 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时,新值首先出现。如果你不想这样,你可以改变appendleftappendpoppopleft。你知道吗

相关问题 更多 >