我有一个数据数组,我正在通过一个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
。
e.g。
#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()
)。
此外,关于这个问题的任何反馈意见都会很好,因为我还是新手。
答案 0 :(得分:2)
以下似乎应该有效:为什么不为每个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.
答案 1 :(得分:0)
除了附加到1-d数组中之外,代码中的所有内容似乎都是正确的。为了解决您的问题,您只需更改代码,以便名为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);
答案 2 :(得分:0)
好的,所以Sam的回答是正确的,只要在迭代中附加值,但是用我的代码尝试它会产生len(i)
列表的列表,其中每个子列表包含 all x
的值满足x1
和x2
的所有元素,而不是每个列表包含特定于[i]
x1
元素的值x2
和{ {1}},因此所有的子列表都是相同的。
我通过用列表推导替换内部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)