开发者

making list in python

When i executed the following python script

list= (1,2,3,4,1,2,7,8)

for number in list:
    item1= number
    item2= list[list.index(item1)+2]
    couple= item1, item2
    print couple

the goal is to link each number with the second following I obtain this result

(1, 3)
(2, 4)
(3, 1)
(4, 2)
(1, 3)
(2, 4)

(and then the index gets out of range but this is not the problem)

My question is why the number 1 in the fifth line is still coupled to the number 3 and how can i make that it is coupled to the number 7; idem for the number 2 in the sixth line that should be coupled to the number 8.

additional questi开发者_JS百科on what do I do if i only want to make a list of the couples that start with 1: [(1,3), (1,7)]


list.index returns the offset of the first occurrence of the value in the list - thus if you do [1,1,1].index(1), the answer will always be 0, even though 1 and 2 are also valid answers.

Instead, try:

from itertools import islice, izip, ifilter

mylist = [1,2,3,4,1,2,7,8]
for pair in ifilter(lambda x: x[0]==1, izip(mylist, islice(mylist, 2, None))):
    print pair

results in

(1, 3)
(1, 7)


xs.index(x) gives you the index of the first occurence of x in xs. So when you get to the second 1, .index gives you the index of the first 1.

If you need the index alongside the value, use enumerate: for i, number in enumerate(numbers): print number, numbers[i+2].

Note that I deliberately didn't use the name list. It's the name of a built-in, you shouldn't overwrite it. Also note that (..., ...) is a tuple (and therefore can't be changed), not a list (which is defined in square brackets [..., ...] and can be changed).


You have duplicates in the list so index always returns the first index.

Start your program with for index in range(len(list) - 1)


You are using .index which returns the first occurrence of number.

consider:

for number in range(len(list)):
    item1= list[number]
    item2= list[number+2]
    couple= item1, item2
    print couple


>>> zip(lst, lst[2:])
[(1, 3), (2, 4), (3, 1), (4, 2), (1, 7), (2, 8)]

To get only pairs (1, X):

>>> [(a, b) for (a, b) in zip(lst, lst[2:]) if a == 1]
[(1, 3), (1, 7)]

Recommended reading:

http://docs.python.org/tutorial/datastructures.html

http://docs.python.org/howto/functional.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜