2017-03-09 76 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