试图弄清楚这个 for 循环是如何工作的

有一个包含数字的列表和另一个包含频率的列表。


age = [19, 20, 21, 22, 23, 24, 25]

frequency = [2, 1, 1, 3, 2, 1, 1]

现在我必须创建另一个列表,其中包含频率列表指定的受尊重频率的列表年龄的数据


S = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]

我在网上看到了执行此操作的代码


def interquartile(arr,freq,n):

    for i,j in zip(arr,freq):

        for k in range(j):

            s.append(i)

   

    print('This is S',s)

interquartile(age,frequency,7)

但我不明白第一个和第二个 for 循环中发生了什么


慕沐林林
浏览 149回答 5
5回答

ibeautiful

zip()创建两个列表的元组:list(zip(age,frequency))[(19, 2), (20, 1), (21, 1), (22, 3), (23, 2), (24, 1), (25, 1)]所以在第一个循环中,i和是每个和j的第一项。agefrequencyage = [19, 20, 21, 22, 23, 24, 25]frequency = [2, 1, 1, 3, 2, 1, 1]第二个循环将循环j次数,表示将循环2次数。每个循环i都会被追加到列表中s。for i,j in zip(arr,freq):    # i = 19    # j = 2    for k in range(j):        s.append(i)一次循环后,列表如下所示:s = [19, 19]经过另一个循环后,它看起来像这样:s = [19, 19, 20]

富国沪深

在第一个 for 循环中,您从年龄和频率中获取值,例如 19 2 在第二个 for 循环中,您迭代循环 j(2) 次,并将 19 两次追加到 s 列表中。在每个 for 循环之后使用 print 语句以便更好地理解。

大话西游666

我的理解是这样的:当你调用函数 interquartile(age,Frequency,7) 时,你正在调用这个函数:interquartile(arr,freq,n)年龄成为你的输入 arr,频率成为你的输入频率,n (在这种情况下 7 是无用的,你没有在任何地方使用它)。在此 for 循环中,您将 arr 的一个元素和 freq 的一个元素分别放入 i 和 j 中:for i,j in zip(arr,freq):在下面的循环中,您运行循环j次。即 1、2 或 3 次,具体取决于频率值。     for k in range(j):当您追加值 j 次时,age 中的值将被追加到列表 s 中。

红颜莎娜

首先,代码需要一些改进。n 不是必需的,并且 s 也必须在向其附加元素之前声明。正确的代码是:def interquartile(arr,freq):    s=[]    for i,j in zip(arr,freq):        for k in range(j):            s.append(i)    print('This is S',s)interquartile(age,frequency)上面的代码采用 2 个列表(可能具有相同的长度,即使没有提及)并使用 zip 在每个列表的相同位置创建元素对 (i,j)。然后使用 range(j) 重复元素 i 的 j 次,并将它们添加到 s,当过程完成时给出所需的输出。

摇曳的蔷薇

如果您想要一个简单的单行程序来完成您正在寻找的内容,您可以使用这样的列表理解,只要两个列表的长度相同:data = [num for i, num in enumerate(age) for j in range(frequency[i])]第一个循环for i, num in enumerate(age)遍历年龄列表并给出索引和该索引处i的值。age第二个循环for j in range(frequency[i])将循环查找 处的值frequency[i]。总之,您将按照频率列表指示的次数插入当前数字。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python