我首先将字符串转换为列表,将所有单词的长度相加,然后除以单词总数得到算术平均值。
st = "Yo estoy estudiando programacion"
lt = st.split()
x = 0
for i in lt:
x += len(i)
m_a = x/len(lt)
if len(i) < m_a:
print("las palabras menores a la media: ", i)
elif len(i) > m_a:
print("las palabras mayores a la media:", i)
但是程序返回给我:
las palabras mayores a la media: programacion
我也应该出去“学习”。
请你帮帮我。
发生的情况是,在循环结束时
for
,变量i
以值结束programacion
这就是为什么在进行比较时,您只对单词
programación
进行比较,而不是比较其余单词。您应该做的是再次浏览单词列表并将它们与平均值进行比较,并将满足定义条件的单词分组到单独的列表中。
使用统计和列表理解模块解决此问题的另一种更紧凑的方法:
我认为这里是关于在围绕中间长度对单词进行排序(“下限”和“上限”)后对它们进行“分区”。
我们可以生成单词和长度的“元组”列表(在 之后
split
),对它们进行排序并将它们分成单词列表和长度列表。由于元素是对应的,我们用 bisect 分割长度列表,并使用单词列表中的分割点。
结果
笔记:
bisect_right
这些词,它们将保持为“次要”(如果平均值不是直接整数,这是有道理的)。如果平均值必须是整数并且必须被视为“更大”,则有必要应用bisect_left