鱼C论坛

 找回密码
 立即注册
查看: 2551|回复: 6

【求助】 while循环 遍历列表

[复制链接]
发表于 2021-6-11 15:52:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

代码:
sandwich_orders = ['apple', 'pastrami', 'pear', 'pastrami', 'water', 'pastrami']
finished_sandwiches =[]

print("Sorry, we dont't have pastrami")
print(sandwich_orders)
while sandwich_orders:
    if 'pastrami' in sandwich_orders:
        sandwich_orders.remove('pastrami')
    sandwich_order = sandwich_orders.pop()
    print('I made your tuna sandwich ' + sandwich_order)
    finished_sandwiches.append(sandwich_order)
   
   
print("\nFinish sandwich: ")

for finished_sandwiche in finished_sandwiches:
    print(finished_sandwiche)

运行结果:
Sorry, we dont't have pastrami
['apple', 'pastrami', 'pear', 'pastrami', 'water', 'pastrami']
I made your tuna sandwich pastrami
I made your tuna sandwich water
I made your tuna sandwich pear
I made your tuna sandwich apple

Finish sandwich:
pastrami
water
pear
apple

想要是实现的效果是 sandwich_orders 列表中的 'pastrami'都删除,finished_sandwiches列表中不包含   'pastrami'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-11 16:33:08 | 显示全部楼层
只改了一个单词,找到它了吗?
sandwich_orders = ['apple', 'pastrami', 'pear', 'pastrami', 'water', 'pastrami']
finished_sandwiches =[]

print("Sorry, we dont't have pastrami")
print(sandwich_orders)
while sandwich_orders:
    while 'pastrami' in sandwich_orders:
        sandwich_orders.remove('pastrami')
    sandwich_order = sandwich_orders.pop()
    print('I made your tuna sandwich ' + sandwich_order)
    finished_sandwiches.append(sandwich_order)
   
   
print("\nFinish sandwich: ")

for finished_sandwiche in finished_sandwiches:
    print(finished_sandwiche)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-11 23:00:25 | 显示全部楼层
如果非得用while来循环,抱歉,恕我愚钝想不出来,但是用for循环和lambda就很快,代码如下:
sandwich_orders = ['apple', 'pastrami', 'pear', 'pastrami', 'water', 'pastrami']
finished_sandwiches =[]

print("Sorry, we dont't have pastrami")
print(sandwich_orders)

for i in sandwich_orders[:]:
    if i == 'pastrami':
        sandwich_orders.remove(i)
finished_sandwiches = [i for i in sandwich_orders if i != 'pastrami']

print("\nFinish sandwich: ")
print(sandwich_orders)
print(finished_sandwiches)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-12 09:51:14 | 显示全部楼层
qq1151985918 发表于 2021-6-11 16:33
只改了一个单词,找到它了吗?

请问一下
while 'pastrami' in sandwich_orders:
        sandwich_orders.remove('pastrami')

这两句已经遍历删除了吧,  那下面这句是什么意思啊。。
    sandwich_order = sandwich_orders.pop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-20 21:13:14 | 显示全部楼层
在我打完这段代码时才发现已经有这么多人回答了,,
sandwich_orders = ['apple', 'pastrami', 'pear', 'pastrami', 'water', 'pastrami']
finished_sandwiches =[]

print("Sorry, we dont't have pastrami")
print(sandwich_orders)
##while sandwich_orders:
    # pop 是后进先出的,remove 是先进先出的,所以while 在执行第一次循环时把sandwich_orders 的最后一个元素
    # "pastrami" 添加到了 "finished_sandwiches"

    # 你应该这样做
for each_food in sandwich_orders:
    if 'pastrami' != each_food: # 如果食材不是牛肉饼才会添加
        finished_sandwiches.append(each_food)
        print('I made your tuna sandwich ' + each_food)

sandwich_orders = []
    
print("\nFinish sandwich: ")

for finished_sandwiche in finished_sandwiches:
    print(finished_sandwiche)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-21 00:10:20 | 显示全部楼层
我不是第一个 发表于 2021-6-12 09:51
请问一下
while 'pastrami' in sandwich_orders:
        sandwich_orders.remove('pastrami')

sandwich_order=sandwich_orders列表的最后一项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-21 16:53:35 | 显示全部楼层
你画个流程图就好理解了,sandwich_orders在第一次循环的时候,第一项不满足 if 'pastrami' in sandwich_orders:这个条件,里面的remove没有执行,接下来执行了sandwich_order = sandwich_orders.pop(),你sandwich_orders最后一项是pastrami,pop出这一项pastrami就成了sandwich_order的第一个值,此时你又把sandwich_order这个值append进了 finished_sandwiches里面,所以你执行打印时就有pastrami了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表