Wrapping around a list in Python.
Denis McMahon
denismfmcmahon at gmail.com
Mon Dec 16 05:12:22 EST 2013
On Mon, 16 Dec 2013 15:59:32 +1100, Ben Finney wrote:
> shengjie.shengjie at live.com writes:
>
>> Hi guys, I am trying to create a fixed list which would allow my values
>> to be wrapped around it.
>
> This doesn't make a lot of sense to me, but I assume you have a purpose
> in mind for this. What is the purpose? Perhaps it will help the
> explanation if we know what it's for.
>
>> For example i have 10 values : 0,1,2,3,4,5,6,7,8,9
>
> Does this mean the input is a list, ‘[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]’? Or
> do you mean something else? What is the input?
>
>> I need to create a list which contains 4 numbers and when the number
>> exceeds the list, it would overwrite the first value.
>
>> [0,1,2,3]
>> [4,1,2,3]
>> [5,4,1,2]
>
> That's three different lists. What is the input in each case? Under what
> circumstances would you expect each one to be produced?
I suspect the OP means:
first input is 0, list = [ 0 ]
next input is 1, list = [ 0, 1 ]
next input is 2, list = [ 0, 1, 2 ]
next input is 3, list = [ 0, 1, 2, 3 ]
next input is 4, list = [ 4, 1, 2, 3 ]
next input is 5, list = [ 5, 4, 1, 2 ]
But this is a bit daft, because he starts by appending, and when he hits
overflow he starts prepending.
What I think he should do is use collections.dequeue and a couple of
helper functions to add and get data items.
For a queue moving from position 0 to position 3 (left to right):
from collections import deque
q = dequeue([])
def add_to_queue( item, q ):
if len( q ) is 4:
q.pop()
q.appendleft( item )
def get_next( q ):
if len( q ) > 0:
return q.pop()
return None
To move from position 3 to position 0 (right to left), swap pop and
appendleft for popleft and append.
--
Denis McMahon, denismfmcmahon at gmail.com
More information about the Python-list
mailing list