我看了很多类似的帖子here , here , here等等,但我无法解决我的问题。我有一个像这样的对列表:
my_list = [[[0, 3], [0, 0]], [[77, 94], [76, 94], [77, 93], [76, 93], [76, 90], [77, 84], [76, 88]], [[25, 31], [10, 0]]]
我想将每个整数乘以 -1。我尝试了不同的事情并得到了不同的错误,但这是我认为最符合逻辑的代码:
for p in range(len(my_list):
for q in range(len(mylist[p])):
my_new_list = [[i,j] * -1 for [i,j] in my_list[p][q]]
而这个甚至都不起作用!我最终想要的是这样的:
my_new_list = [[[0, -3], [0, 0]], [[-77, -94], [-76, -94], [-77, -93], [-76, -93], [-76, -90], [-77, -84], [-76, -88]], [[-25, -31], [-10, 0]]]
谁能帮我解决这个问题?
请您参考如下方法:
您的问题是您的最内层循环正在创建一个新的子列表,但没有适本地将其分配回(新列表或 my_list)。每次都重写前一次迭代的结果。
您需要的是具有三个循环的列表推导式,每个循环对应一个嵌套级别:
my_new_list = [[[z * -1 for z in y] for y in x] for x in my_list]
如果你能保证最里面的列表总是成对的,你可以按照@ShadowRanger 的建议简化它,并使用带有两个循环的嵌套列表 comp,
my_new_list = [[[-a, -b] for a, b in x] for x in my_list]
这相当于做
import copy
my_new_list = copy.deepcopy(my_list)
for x in my_new_list:
for y in x:
for i, z in enumerate(y):
y[i] = z * -1 # notice the assignment back to the sublist
