Python - 在迭代期间拆分整数列表

时间:2017-08-21 16:58:04

标签: python python-3.x

我有一个数据数组,我正在通过一个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])与边界x1x2进行比较,返回整数列表,而外部循环遍历值的整数边界。

我遇到的问题是输出(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())。

此外,关于这个问题的任何反馈意见都会很好,因为我还是新手。

3 个答案:

答案 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的值满足x1x2的所有元素,而不是每个列表包含特定于[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)