Python:重新排列字符串数组

时间:2017-03-09 18:11:25

标签: python arrays string

我试图重新安排以下字符串数组:

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:列表索引超出范围

我对python很新,并想知道是否有一种比我当前想法更简单的方法,如果没有,是否有人能够解释阻止循环运行的原因。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

由于名称变量,您提供的代码片段无法正常工作,因此我不会尝试进一步解释您的错误。

也就是说,使用列表推导可以在单行中轻松完成这些问题:

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

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

print(new_string)

只需创建一个新的列表列表,第一个元素为head,其余为tail。

结果为:

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

答案 2 :(得分:0)

不是试图使用第一个列表来保存字符串0000,而是为什么不把它放在常量中而不是

MAGIC_STRING = '0000'

然后只需使用常量来创建新的,修改过的子列表:

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