为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕沐林林 2023-10-11 16:14:26
有一个包含数字的列表和另一个包含频率的列表。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 循环中发生了什么
查看完整描述

5 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

zip()创建两个列表的元组:


list(zip(age,frequency))

[(19, 2), (20, 1), (21, 1), (22, 3), (23, 2), (24, 1), (25, 1)]

所以在第一个循环中,i和是每个和j的第一项。agefrequency


age = [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]


查看完整回答
反对 回复 2023-10-11
?
富国沪深

TA贡献1790条经验 获得超9个赞

在第一个 for 循环中,您从年龄和频率中获取值,例如 19 2 在第二个 for 循环中,您迭代循环 j(2) 次,并将 19 两次追加到 s 列表中。

在每个 for 循环之后使用 print 语句以便更好地理解。


查看完整回答
反对 回复 2023-10-11
?
大话西游666

TA贡献1817条经验 获得超14个赞

我的理解是这样的:当你调用函数 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 中。


查看完整回答
反对 回复 2023-10-11
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

首先,代码需要一些改进。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,当过程完成时给出所需的输出。


查看完整回答
反对 回复 2023-10-11
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

如果您想要一个简单的单行程序来完成您正在寻找的内容,您可以使用这样的列表理解,只要两个列表的长度相同:

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]

总之,您将按照频率列表指示的次数插入当前数字。


查看完整回答
反对 回复 2023-10-11
  • 5 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信