[英]How to iterate over a list of list of lists of lists of lists… of list of pair of coordinates in python?
我正在尝试遍历列表列表的列表... python 中的坐标对列表,我想对这些坐标对中的每一个求和一个值,但我也想保留结构。
我认为一个例子的价值超过一千字,所以:
coordinates = [[[-15.418887, 28.180395], [-15.418887, 28.180395]],
[[-15.794088, 28.018681], [-15.794088, 28.018681]]]
这是一个非常基本的例子,但不是真实的情况。 实际上,除了一对坐标之外,每个列表都有可变长度。 所以可能有 4 个列表,直到对坐标列表的列表,或者它可能是 3,它是可变的
我想为每个坐标添加 3(例如),但保持原始结构(我不想将列表列表变平....)
任何帮助表示赞赏。
coordinates = [[[-15.418887, 28.180395], [-15.418887, 28.180395]],
[[-15.794088, 28.018681], [-15.794088, 28.018681]]]
def recursively_add3(l):
if isinstance(l, float):
return l
for index, inner_list in enumerate(l):
inner_result = recursively_add3(inner_list)
if inner_result is not None:
l[index] = inner_result + 3
return None
recursively_add3(coordinates)
这给出了结果
[[[-12.418887, 31.180395], [-12.418887, 31.180395]]
, [[-12.794088, 31.018681], [-12.794088, 31.018681]]]
您可以使用递归 function 来处理一般情况。 只需检查是否有列表并递归,否则返回加法的结果:
def add_to_list(l, n):
if not isinstance(l, list):
return l + n
return [add_to_list(sub, n) for sub in l]
coordinates = [[[-15.418887, 28.180395], [-15.418887, 28.180395]],[[-15.794088, 28.018681], [-15.794088, 28.018681]]]
add_to_list(coordinates, 3)
#[[[-12.418887, 31.180395], [-12.418887, 31.180395]], [[-12.794088, 31.018681], [[-12.794088, 31.018681]]]]
# A more general case:
add_to_list([1, [2, [5, [6]]], 3], 2)
# [3, [4, [7, [8]]], 5]
# Degenerate cases
add_to_list([], 2)
# []
add_to_list(5, 2)
# 7
这假设您的嵌套数据将是数字或列表。
一般map
方法仅将 function 应用于随机深度嵌套列表的最里面的元素:
def map_nested(fnc, lst):
if not isinstance(lst, list):
return fnc(lst)
return [map_nested(fnc, x) for x in lst]
# or for in-place mutation:
# lst[:] = (map_nested(fnc, x) for x in lst)
# return lst
add3 = lambda x: x+3
map_nested(add3, coordinates)
# [[[-12.418887, 31.180395], [-12.418887, 31.180395]],
# [[-12.794088, 31.018681], [-12.794088, 31.018681]]]
您正在使用坐标的 3D 向量(列表列表)对吗? 那么你的循环应该是三倍以访问该 3D 向量上的所有变量。
for x in list: #x is a list of lists
for y in x: #y is a list
for z in y: #z is a pair of coordinates
#Your code here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.