我试图重新安排以下字符串数组:
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很新,并想知道是否有一种比我当前想法更简单的方法,如果没有,是否有人能够解释阻止循环运行的原因。
答案 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]