Python if处理列表

通过结合使用if语句和列表,可完成一些有趣的任务:对列表中特定的值做特殊处理;高效地管理不断变化的情形,如餐馆是否还有特定的食材;证明代码在各种情形下都将按预期那样运行。

检查特殊元素

前面介绍了条件测试if语句,大家有了大致的认识,下面来进一步研究如何检查列表中的特殊值,并对其做合适的处理。

继续使用前面的比萨店示例。这家比萨店在制作比萨时,每添加一种配料都打印一条消息。通过创建一个列表,在其中包含顾客点的配料,并使用一个循环来指出添加到比萨中的配料,可以以极高的效率编写这样的代码:

requested_toppings = ['mushrooms', 'green peppers', 'extra cheese', 'coolcou']
for requested_topping in requested_toppings:
    print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")

输出很简单,因为上述代码不过是一个简单的for循环:

Adding mushrooms.
Adding green peppers.
Adding extra cheese.
Adding coolcou.

Finished making your pizza!

然而,如果比萨店的青椒用完了,该如何处理呢?为妥善地处理这种情况,可在for循环中包含一条if语句:

requested_toppings = ['mushrooms', 'green peppers', 'extra cheese', 'coolcou']
for requested_topping in requested_toppings:
    if requested_topping == "green peppers":  #(1)
        print("Sorry, we are out of green pappers right now.")
    else: #(2)
        print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")

这里在比萨中添加每种配料前都进行检查。(1)处的代码检查顾客点的是否是青椒,如果是,就显示一条消息,指出不能点青椒的原因。(2)处的else代码块确保其他配料都将添加到比萨中。

输出如下:

Adding mushrooms.
Sorry, we are out of green pappers right now.
Adding extra cheese.
Adding coolcou.

Finished making your pizza!

确定列表不是空的

到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行for循环前确定列表是否为空很重要。

下面在制作比萨前检查顾客点的配料列表是否为空。如果列表是空的,就向顾客确认他是否要点普通比萨;如果列表不为空,就像前面的示例那样制作比萨:

requested_toppings = []
if requested_toppings: #(1)
    for requested_topping in requested_toppings:
        print("Adding " + requested_topping + ".")
    print("\nFinished making your pizza!")
else:
    print("Are you sure you want a plain pizza?")

在这里,我们首先创建了一个空列表,其中不包含任何配料。在(1)处我们进行了简单检查,而不是直接执行for循环。在if语句中将列表名用在条件表达式中时,Python将在列表至少包含一个元素时返回True,并在列表为空时返回False。如果requested_toppings不为空,就运行与前一个示例相同的for循环;否则,就打印一条消息,询问顾客是否确实要点不加任何配料的普通比萨。

输出如下:

Are you sure you want a plain pizza?

如果这个列表不为空,将显示在比萨中添加的各种配料的输出。

使用多个列表

顾客的要求往往五花八门,在比萨配料方面尤其如此。如果顾客要在比萨中添加炸薯条,该怎么办呢?可使用列表和if语句来确定能否满足顾客的要求。

来看看在制作比萨前如何拒绝怪异的配料要求。下面的示例定义了两个列表,其中第一个列表包含比萨店供应的配料,而第二个列表包含顾客点的配料。这次对于requested_toppings中的每个元素,都检查它是否是比萨店供应的配料,再决定是否在比萨中添加它:

available_toppings = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']  # (1)
requested_toppings = ['mushrooms', 'french fries', 'extra cheese'] #(2)
for requested_topping in requested_toppings:  #(3)
    if requested_topping in available_toppings: #(4)
        print("Adding " + requested_topping + ".")
    else:
        print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")

在(1)处,我们定义了一个列表,其中包含比萨店供应的配料。请注意,如果比萨店供应的配料是固定的,也可使用一个元组来存储它们。在(2)处,我们又创建了一个列表,其中包含顾客点的配料,请注意那个不同寻常的配料——’french fries’。在(3)处,我们遍历顾客点的配料列表。在这个循环中,对于顾客点的每种配料,我们都检查它是否包含在供应的配料列表中(见(4));如果答案是肯定的,就将其加入到比萨中,否则将运行else代码块:打印一条消息,告诉顾客不供应这种配料。

输出如下:

Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.

Finished making your pizza!

通过为数不多的几行代码,我们高效地处理了一种真实的情形!

赞(0)

评论 抢沙发

评论前必须登录!