我有一个字符串列表列表:
listBefore = [['4', '5', '1', '1'],
['4', '6', '1', '1'],
['4', '7', '8', '1'],
['1', '2', '1', '1'],
['2', '3', '1', '1'],
['7', '8', '1', '1'],
['7', '9', '1', '1'],
['2', '4', '3', '1']]
我想在每个列表的中间添加一个计数器/索引,以便列表如下:
listAfter = [['4', '5', '1', '1', '1'],
['4', '6', '2', '1', '1'],
['4', '7', '3', '8', '1'],
['1', '2', '4', '1', '1'],
['2', '3', '5', '1', '1'],
['7', '8', '6', '1', '1'],
['7', '9', '7', '1', '1'],
['2', '4', '8', '3', '1']]
最简单的方法是什么?我可以循环遍历列表并添加索引,但是有更简洁的方法吗?
干杯, 凯特
编辑: 我写的代码对我有用:
item = 1
for list in listBefore:
list.insert(2,str(item))
item = item + 1
print listBefore
我想知道是否有其他方法可以更有效率地或一步到位。
答案 0 :(得分:2)
使用enumerate()
迭代父列表以获取计数器(在下面的示例中用作i
)以及list元素。在子列表中,使用i
方法将list.insert(index, value)
插入子列表的中间位置。
注意:计数器i
的值将为int
类型,因此您必须明确键入将其转换为str
str(i)
之前的for i, sub_list in enumerate(my_list, 1): # Here my_list is the list mentioned in question as 'listBefore'
sub_list.insert(len(sub_list)/2, str(i))
# Value of 'my_list'
# [['4', '5', '1', '1', '1'],
# ['4', '6', '2', '1', '1'],
# ['4', '7', '3', '8', '1'],
# ['1', '2', '4', '1', '1'],
# ['2', '3', '5', '1', '1'],
# ['7', '8', '6', '1', '1'],
# ['7', '9', '7', '1', '1'],
# ['2', '4', '8', '3', '1']]
插入。以下是示例代码:
Intent intent=new Intent(A.this,B.class);
intent.putStringArrayListExtra("LIST","your array list");
答案 1 :(得分:1)
您可以使用列表推导执行此操作
No command 'peer' found, did you mean:
答案 2 :(得分:0)
您应该了解str_list
,它允许您使用两个迭代器迭代列表 - 一个() holds the current item in the list, and the other (
在这种情况下for i,str_list in enumerate(listBefore):
listBefore[i] = str_list[:len(str_list)//2] + [str(i+1)] + str_list[len(str_list)//2:]
i`)保留它的索引清单。
10-06 12:01:51.055 21591-21627/com.jpfalmazan.ninjaassault E/AndroidRuntime: FATAL EXCEPTION: GLThread 2891
java.lang.NullPointerException
at com.jpfalmazan.ninjaassault.GameScreens.MenuScreen.<init>(MenuScreen.java:23)
at com.jpfalmazan.ninjaassault.NinjaAssault.create(NinjaAssault.java:19)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:275)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1505)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
答案 3 :(得分:0)
>>> data = [['4', '5', '1', '1'],
['4', '6', '1', '1'],
['4', '7', '8', '1'],
['1', '2', '1', '1'],
['2', '3', '1', '1'],
['7', '8', '1', '1'],
['7', '9', '1', '1'],
['2', '4', '3', '1']]
>>> print [row[:len(row)//2] + [str(i)] + row[len(row)//2:]
for i, row in enumerate(data, start=1)]
[['4', '5', '1', '1', '1'],
['4', '6', '2', '1', '1'],
['4', '7', '3', '8', '1'],
['1', '2', '4', '1', '1'],
['2', '3', '5', '1', '1'],
['7', '8', '6', '1', '1'],
['7', '9', '7', '1', '1'],
['2', '4', '8', '3', '1']]