我有一个数据数组,我正在对浮点数的 3D 数组进行切片,并附加满足一组上限和下限(也是浮点数(的元素数量。
我的代码的第一部分包含一个嵌套的for
循环,样式如下:
x_lst = []
for i in range(len(x1)):
for x in range(len(floatarray[0,:,0])):
if x1[i] <= floatarray[0,x,0] <= x2[i]:
x_lst.append(x)
#issues after this point
内循环将数组(floatarray[0,x,0]
(中的数据与边界x1
和x2
进行比较,返回整数列表,而外循环遍历边界的值。
我遇到的问题是输出(x_lst
(是一个列表,而我一直在尝试生成一个列表列表,每个子列表对应于可迭代i
。
例如
#Desired output
x_lst = [[5,6,7,13,14],[21,22,23,36,37],[44,45,...
#Actual output
x_lst = [5,6,7,13,14,21,22,23,36,37,44,45,...
我觉得有一种非常简单的方法可以做到这一点,但我无法想出任何有效的方法(例如尝试在附加后使用x_lst.split()
(。
此外,关于这个问题的任何反馈都会很棒,因为我对 SO 仍然相当陌生。
似乎以下内容应该有效:为什么不为每个i
创建一个中间子列表,并向子列表添加适当的值,然后最终将子列表添加到主列表?
x_lst = []
for i in range(len(x1)):
inner_list = [] # The sublist to be appended.
for x in range(len(floatarray[0,:,0])):
if x1[i] <= floatarray[0,x,0] <= x2[i]:
inner_list.append(x) # Add the numbers to the sublist.
# Issues after this point...
x_lst.append(inner_list) # Add the sublist to the main list.
代码中的一切似乎都是正确的,除了你附加到一维数组中。为了解决您的问题,您可以简单地更改代码,以便名为 temp 的临时数组将在内部循环中附加数据,然后将其附加到外部数组x_lst如下所示:
x_lst = []
for i in range(len(x1))
temp=[]
for x in range(len(floatarray[0,:,0])):
if x1[i] <= floatarray[0,x,0] <= x2[i]:
temp.append(x)
x_lst.append(temp);
好的,所以 Sam 的答案是正确的,因为通过迭代附加值,但用我的代码尝试它会产生len(i)
列表列表,其中每个子列表包含满足x1
和x2
所有元素的x
值,而不是每个列表都包含特定于x1
和x2
的第[i]
个元素的值, 因此,所有子列表都是相同的。
我通过将内部for
循环替换为列表推导来解决此问题,如下所示,它给出了正确的结果(以所需的形式x_lst = [[5,6,7,13,14],[21,22,23,36,37],[44,45,...
(:
x_lst = []
for i in range(len(x1)):
y = [x for x in range(len(floatarray[0,:,0])) if x1[i] <= floatarray[0,x,0] <= x2[i]]
x_lst.append(y)