2013-07-08 39 views
0

因此,我和我的好友正在互相幫助瞭解編程知識,而且我們一直在爲自己提出挑戰。他想出了一個有20個開關的地方。我們需要編寫一個程序,首先擊中每個其他開關,然後每隔第三個開關,然後每隔四個開關打開一個開關。無法弄清楚如何增加列表中的某些值

我的腦海裏有一個基本的想法,但我並不完全知道如何從列表中挑出其他所有/ 3rd/4th值。我想,一旦我得到了一小塊,其餘的應該很容易。

這裏的名單:

start_list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 

我知道我可以做選擇的每個元素:

start_list[2] 

但後來,我該如何選擇所有其他元素,然後遞增1呢?

+0

使用切片:HTTP://docs.python.org/2/reference/expressions.html#slicings –

+0

你的朋友提出的挑戰是衆所周知的。還有一個分析解決方案。 –

回答

2

使用Python's List Slicing Notation

start_list[::2] 

切片爲[start:stop:step][::2]意味着,從開始到結束,獲得每一秒的元素。這返回每個第二個元素。

我相信你可以弄清楚如何得到每個第三和第四個值:p。


要改變每個值,你可以這樣做:

>>> start_list[::2] = len(start_list[::2])*[1] 
>>> start_list 
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
+0

好的,所以我把那部分關閉了,但我現在無法弄清楚如何將這些數字加1。 – Spurnout

+0

@Spunout我編輯了我的答案 – TerryA

+0

太棒了!這樣可行!只需要分析它,以便我瞭解那裏發生了什麼。另外,還有一個問題,我應該很好。是否有可能從第二個號碼開始?所以它是0,1 ... – Spurnout

1

每隔開關:

mylist[::2] 

每三:

mylist[::3] 

您可以分配給它太:

mylist=[1,2,3,4] 
mylist[::2]=[7,8] 
+0

start_list [:: 2] = [1] *((len(start_list)+1)/ 2) - 分配給片時需要提供正確長度的列表。 – Tiago

+0

感謝蒂亞戈,我在運行時得到了這個輸出。 TypeError:無法乘以類型爲'float'的非整型序列 – Spurnout

+0

對不起,我仍在使用python 2.在python 3中,int除法得到一個float結果。你應該用'/'運算符替換'// – Tiago

1
>>> start_list = [0] * 20 
>>> for i in range(2, len(start_list)): 
...  start_list[::i] = [1-x for x in start_list[::i]] 
... 
>>> start_list 
[0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]