2017-03-09 50 views
0

我試圖重新排列字符串以下數組的數組:的Python:重新安排串

myString =['000', ['1', 'two', 'three'], ['1', 'b', 'c']] 

這樣myString2看起來像

myString2 = [['000', '1', 'two', 'three'], [['000', '1', 'b', 'c']] 

尋找周圍的一些想法(如here)我嘗試了下面的循環:

myString2 = [] 
for i in range(0,len(myString)-1): 
    myString2 [i].append(myString[0]) 
    myString2 [i].append(myString[i]) 

但是我得到一個錯誤,我並不真正在站立:

IndexError: list index out of range

我是相當新的蟒蛇,不知道是否有可能比我現在的想法更簡單的方法,如果沒有,如果有人能和藹解釋什麼是防止循環運行。

+0

第二個嵌套預期應該只以一個括號開始。 –

+2

我認爲你需要提供更多的細節,你想要完成什麼,以及你所期望的各種投入。沒有你詳細說明就很難提供某種通用的解決方案。例如,你是否期望處理像'['000',['1','2','3'',''','b','c'],'001']'如果是這樣,你期望輸出什麼? –

+1

另外你的「嘗試」會在發佈之前得到一個'NameError'。 –

回答

1

您提供的代碼片段無法工作,因爲變量名稱,所以我不會試圖解釋你進一步的問題。

這就是說,這些問題可以很容易地在應用列表解析單行完成:

myString =['000', ['1', 'two', 'three'], ['1', 'b', 'c']] 

new_string = [[myString[0]]+s for s in myString[1:]] 

print(new_string) 

剛剛創建列表的一個新的列表,第一個元素爲頭,其餘的尾巴。

結果爲:

[['000', '1', 'two', 'three'], ['000', '1', 'b', 'c']] 
+0

偉大的單線!感謝您通過變量中的拼寫錯誤,這正是我所希望的。 – sc28

0

,而不是試圖使用第一個列表牽繩子0000,爲什麼不把它放在一個常量

MAGIC_STRING = '0000'

,然後簡單地使用不斷創建新的修改後的子列表:

myString = [['1', 'two', 'three'], ['1', 'b', 'c']] 
myString2 = [[MAGIC_STRING] + el for el in myString] 
2

您近距離接受您的腳本,此作品:

myString =['000', ['1', 'two', 'three'], ['1', 'b', 'c']] 
myString2 = [] 
for i in range(1,len(myString)): 
    myString2.append(myString[0]) 
    myString2.append(myString[i]) 

出了什麼問題?

  • myString2[i].append嘗試一些東西附加在myString,指數i,所以在第一次迭代中嘗試訪問myString[0]myString仍然是空的,這導致了誤差範圍。而是使用append只是在名單上,它會在最後一個位置添加的元素
  • 你的第二個元素range(1,...
  • 範圍是獨家需要循環,所以range(1,5)[1,2,3,4] - >你不需要。減去1
+0

upvote花時間瞭解OP代碼問題:) –

+0

是的,謝謝,這是非常有益的!所以現在我知道了一個乾淨的單行程的新方法,並且也理解了我更重的代碼的邏輯:) – sc28