Python奇数列表

2022-01-30 08:50:14 标签 python

所以我给了一个列表,我需要从列表中抓取奇数和他们的总和问题是,我需要只抓取列表中的前5个奇数在一个while循环,这是我想到的:

num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69 , 113, 166]
runs = 0
odd = []
while runs <=5:
    for i in num_list:
        if i % 2 == 1:
            odd.append(i)
            runs += 1
print(odd)

代码运行,但我的计数器不工作,它追加了所有的奇数,而不是在迭代中发现的前5个,这里有什么问题?

没有while循环会更容易,但他们要求我使用while循环。

###你不需要外部while循环。它只是重复这个过程5次。

这应该工作。

num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69 , 113, 166]
runs = 0
odds = []
for n in num_list:
    if n % 2 == 1:
        odds.append(n)
        runs += 1
        if runs == 5:
            break
print(odds)

你马上就成功了。

但在这种情况下,你不需要两个嵌套循环,你可以在for循环的末尾检查,如果你已经得到了足够的数字,然后中断循环。

runs = 0
for i in num_list:
    if i % 2 == 1:
        odd.append(i)
        runs += 1
        if runs == 5:
           break
print(odd)

或者,您可以检查结果数组的长度,而不是计算运行的次数。

odd = []
for i in num_list:
    if i % 2 == 1:
        odd.append(i)
        if len(odd) == 5:
          break
print(odd)

随着您学习Python之旅的进展,您可能会了解其他可用于此类任务的技术。例如使用列表推导式。

odd = [i for i in array if i % 2 == 1][:5]

这种实现的缺点是,它首先计算整个数组的奇数,然后丢弃除前5个以外的所有内容。

您可以通过使用生成器来解决这个问题。

odd = (i for i in array if i % 2 == 1)
print(list(next(odd) for _ in range(5)))

前面的代码片段只是向您展示一些新的语言特性。这个实现有问题,所以我不会真正使用它。

Python的一个优点是它的伟大的标准库。您可能会熟悉itertools模块。

import itertools
odds = (i for i in array if i % 2 == 1)
list(itertools.islice(odds, 5))

# # #看看这个。你可以使用while循环中的条件来检查奇数列表的长度。

num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69 , 113, 166]
odd = []
i = 0
while len(odd) < 5:
    if num_list[i] %2 != 0:
        odd.append(num_list[i])
    i+=1
       
print(odd)

###你可以考虑从num_list创建奇数生成器,然后运行5次生成器返回前5个奇数。

num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69 , 113, 166]
odd=(x for x in num_list if x%2!=0)  # generator will return only odd numbers using source as num_list
sumOdds=0
for i in range(5):
   sumOdds+=next(odd)  # next runs generator and returns value

###试试这个。

num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69 , 113, 166]
i=0
odd_nums=[]
while(i < len(num_list)):
      
    # checking condition
    if num_list[i] % 2 != 0 and len(odd_nums)<5:
        odd_nums.append(num_list[i])
      
    # increment i  
    i += 1
print(odd_nums)
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码