【Python】90%开发者未注意到的Python特性

1. 引言

如果你在日常工作中经常使用Python进行编码,那么毫无疑问你会非常喜欢这个简单的Python功能。
闲话少说,我们直接开始吧!

2. 举个栗子

例如,要求大家打印列表中元素的值。我想大部分人可以立即使用 for 循环来执行此操作。

li = [10, 20, 30, 40, 50]

for i in li:
    print(i)

结果如下:

10
20
30
40
50

但是现在,我们是否可以在同一行中打印多个元素的值,每个元素之间都有一个空格。此时我们可以通过使用函数print() 中的 end 参数来实现。代码如下:

li = [10, 20, 30, 40, 50]

for i in li:
    print(i, end=' ')

结果如下:

10 20 30 40 50 

3. 问题由来

现在,的确上述输出,看起来可以满足我们的要求。但是有个不完美的地方在于最后一个循环打印 数字50的时候,使用 end 参数在其后添加一个空格。虽然 end 参数帮助我们打印了中间的空间,但将空格放在最后的这种副作用并不是我们想要的。

特别是,当涉及到在线面试问题和编码平台时,他们希望我们得到给定的确切输出。即使是额外的空格有时候也会导致网站不接受我们的解决方案。

4. 错误方案

要解决此问题,如果您考虑通过索引打印每个元素,那大概率是行不通的!为什么?因为编码平台具有隐藏的测试用例,这些测试用例可能会接收不同数量的值。

下面是一个示例。

Question

Get a list of integers as input in the given format and print the values
in the given format:

Input:
10 20 30

Output:
10 20 30

Hidden Test Case:

Input:
10 20

Output:
10 20

样例代码:

li = list(map(int, input().split()))
print(li[0], li[1], li[2])

第一个测试case可以通过:

Input:
10 20 30

Output:
10 20 30

但是,对于隐藏的测试用例,列表中只有两个值。所以 li[2] 会触发一个 IndexError,如下:

Input:
10 20

Output:
IndexError: list index out of range

5. 解决方案

那么我们要如何解决这个问题?嗯,这就是星号操作符的用武之地。您是否尝试过在 print() 函数中在列表(或任何可迭代对象)前使用星号 *
实质上在函数print中使用它会将列表(或任何可迭代对象)中的每个元素作为单独的值传递,并在它们之间用空格打印它们,就像使用逗号手动操作一样。
代码如下:

li = list(map(int, input().split()))
print(*li)

我们来测试第一个用例:

Input:
10 20 30

Output:
10 20 30

接着测试隐藏的用例:

Input:
10 20

Output:
10 20

6. 其他用法

事实上,可以将其扩展应用于任何可迭代对象。下面是使用字符串和 range()给出的一些示例。

样例一:

s = 'medium'
print(*s)

输出:

m e d i u m

样例二:

print(*range(1, 6))
print(*range(4, 8))

输出:

1 2 3 4 5
4 5 6 7

7. 总结

看到这里的小伙伴,想必这个功能对你来说是崭新和有趣的吗?
事实上,从大家最喜欢的编码语言中了解学习新事物总是感觉很棒!

希望大家可以从现在开始使用此功能,并使编码看起来更容易。

猜你喜欢

转载自blog.csdn.net/sgzqc/article/details/132646179
今日推荐