猿问

如何调整 for 循环以便它只打印一次列表?

我有一些示例代码如下:


import numpy as np

import pandas as pd


x = range(1, 12)

arr1 = np.random.randint(x)

arr2 = np.array(x)

arr3 = np.random.randint(x)

arr4 = np.random.randint(x)

arr5 = np.random.randint(0, 2, 11)


dict_df = {

    'arr1' : arr1,

    'arr2' : arr2,

    'arr3' : arr3,

    'arr4' : arr4,

    'arr5' : arr5

}

d = pd.DataFrame(dict_df)


num_count = 0

list_of_num = []

for i in d.index:

    number = d['arr1'][i]

    for num in d['arr5']:

        if num == 1:

            num_count = 1

            number = number

            list_of_num.append(number)

        elif num == 0:

            num_count = 0

print(list_of_num)

我正在尝试构建列表,如果列中的所有列前面arr5都有 -1,则它们都会附加到列表中。我从中收到的输出是:


[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8]

代码的问题是我误用了for循环,这就是为什么列表重复了这么多次的原因。我怎样才能更改代码以使代码不会重复?


慕的地8271018
浏览 147回答 1
1回答

翻翻过去那场雪

看来您并不打算嵌套循环。外循环遍历每一行。然后,对于外循环的每次迭代,内循环遍历每一行。要同步移动两列,您可以编写一个循环:for i in d.index:     if d['arr5'][i]:         list_of_num.append(d['arr1'][i])         num_count += 1这当然是非常低效的,并且首先放弃了使用 numpy 或 pandas 的所有好处。您可以使用布尔掩码完成同样的事情。在麻木中:array_of_num = arr1[arr5.astype(bool)] num_count = array_of_num.size在熊猫中:series_of_num = d['arr1'][d['arr5'].astype(bool)] num_count = series_of_num.size在这两种情况下,您都可以替换.astype(bool)为!= 0.
随时随地看视频慕课网APP

相关分类

Python
我要回答