2014-10-20 73 views
0

我正在處理python中的代碼。特別是代碼是關於scythe密碼編碼的。我做了一些循環,但我不知道是否有可能在一個循環中減少它。你可以幫我嗎? 這裏是我的代碼:減少代碼。減少一些for-loops到一個python

for b in range(1, len(word), 6): 
    word_list2.append(word[b]) 
print(word_list2) 

for c in range(2, len(word), 6): 
    word_list3.append(word[c]) 
print(word_list3) 

for d in range(3, len(word), 6): 
    word_list4.append(word[d]) 
print(word_list4) 

for e in range(4, len(word), 6): 
    word_list5.append(word[e]) 
print(word_list5) 

for f in range(5, len(word), 6): 
    word_list6.append(word[f]) 
print(word_list6) 

這正是代碼我想要做什麼,但我想知道是否有可能減少在短短一個for循環的一切。

下面是解我做鏈接回答我收到並致力於IT:

word_list = [] 
for i in range(0,5): 
    word_list1 = word[i::6] 
word_lists = [word[start::6] for start in range(6)] 

回答

10

您不需要使用循環切片哪裏會做:

word_list1 = word[0::6] 
word_list2 = word[1::6] 
word_list3 = word[2::6] 
word_list4 = word[3::6] 
word_list5 = word[4::6] 
word_list6 = word[5::6] 

每一種現在是從word開始的第6個元素的新列表對象,從增加第一個索引開始。

但是您不會使用單獨的變量;你可以很容易地使這與列表理解列表:

word_lists = [word[start::6] for start in range(6)] 

現在你也有6個單,每一個選擇每6個字,通過對5可以解決與word_lists[0]每個列表開始索引0 ,word_lists[1]

+0

你應該更新這個使用append,你的解決方案將覆蓋現有的單詞列表 – Parker 2014-10-20 15:47:25

+0

@Parker:如果它們不是空的,你可以使用*'list.extend()*。 'word_list1.extend(字[0 :: 6])'。或者使用'+ ='擴充賦值。例如。 'word_list1 + = word [0 :: 6]'。 – 2014-10-20 15:47:57

+0

所以我總是要創建6個不同的列表,對吧? – pp94 2014-10-20 15:48:27