还有一个提示 - 如果有人在HackerRank上学习Python,那么知道这对于开始是至关重要的.
我正在尝试理解这段代码:
stamps = set()
for _ in range(int(input())):
print('underscore is', _)
stamps.add(raw_input().strip())
print(stamps)
Run Code Online (Sandbox Code Playgroud)
输出:
>>>2
underscore is 0
>>>first
set(['first'])
underscore is 1
>>>second
set(['second', 'first'])
Run Code Online (Sandbox Code Playgroud)
我把2作为第一个原始输入.函数如何知道我只循环两次?这让我失望,因为它不是典型的......对于我在xrange(0,2)结构中.
起初我的想法是下划线重复shell中的最后一个命令.所以我在代码中添加了print语句来查看下划线的值......但是这些值只显示0和1,就像典型的循环结构一样.
我已经阅读了这篇文章,但仍然无法理解使用下划线的3个用法中的哪一个.
我刚刚开始学习Python,所以很容易理解这些简单的解释!
我在玩_Python解释器中的下划线,并想尝试一下它在代码中是否具有相同的行为。我在代码中使用下划线作为“无关”变量,如下所示:
_, a = someFunction()
Run Code Online (Sandbox Code Playgroud)
并在解释器中获取最后存储的值,如下所示:
>>> 2 + 2
4
>>> a = _
>>> a
4
Run Code Online (Sandbox Code Playgroud)
现在,我尝试执行以下示例代码:
for i in range(5):
2 + 1
a = _
print (a)
Run Code Online (Sandbox Code Playgroud)
在解释器中以及用Python脚本编写并使用来运行python underscore.py。
考虑到_下划线将保存最后存储的值的行为,因为下划线不会被格式化为“无关”变量,因此预期的结果将是2 + 1 = 3,使3最后存储的值被保存到a用变量a = _。
口译员的结果如下:
>>> for i in range(5):
... 2 + 1
... a = _
...
3
3
3
3
3
>>> print(a)
3
Run Code Online (Sandbox Code Playgroud)
此结果按预期方式运行,而将相同代码的结果保存在Python脚本中并使用运行时python underscore.py …
应该如何将 aiterable解包为数量不匹配的变量?
值太多:
>>> one,two = [1,2,3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
Run Code Online (Sandbox Code Playgroud)
可以忽略
>>> one,two,*_ = [1,2,3,4]
>>>
Run Code Online (Sandbox Code Playgroud)
注意:“扩展可迭代解包”仅从 Python 3 开始。关于下划线。
数据太少/变量多的相反情况如何:
>>> one,two,three = [1,2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)
>>>
Run Code Online (Sandbox Code Playgroud)
被处理,特别是以便分配剩余的变量None(或其他值)?
像这样的东西:
>>> one,two,three = [1,2] or None
Traceback …Run Code Online (Sandbox Code Playgroud) 我试图用以下方法使DeprecationWarning保持沉默.
import warnings
warnings.filterwarnings(action='ignore')
from sklearn.ensemble import RandomForestRegressor
Run Code Online (Sandbox Code Playgroud)
但是,它仍然显示:
DeprecationWarning:numpy.core.umath_tests是一个内部NumPy模块,不应导入.它将在未来的NumPy版本中删除.来自numpy.core.umath_tests导入inner1d
为什么会发生这种情况,我该如何解决?
我在python 3.6.6,numpy 1.15.0和scikit-learn 0.19.2上运行它,并且添加category=DeprecationWarning没有帮助.
我正在使用type()Python中的方法,并遇到了这个:
>>> type(_)
<type 'type'>
Run Code Online (Sandbox Code Playgroud)
下划线(_)字符的"类型" type本身就是.那有什么意思?
可以说我有:
[obj for (_, obj) in stack]
Run Code Online (Sandbox Code Playgroud)
此代码假定第一个对象stack是元组,并丢弃元组的第一部分。
如果代码不是元组,而是单个对象,会发生什么?
它是否只是忽略扔掉的部分并拿走整个物体?
这很容易成为一个重复的问题 - 因为它是.但是,对此有很多不充分的答案(例如,尝试curses! - 指向26页的文档).
我只是想在IDLE输出时用蓝色以外的颜色打印文本.可能吗?有什么简单的方法可以做到这一点?我在Windows上运行Python 3.6.
请举例说明.
(我发现ANSI代码在IDLE中不起作用,只在终端上有效.)
我正在检查有关黑客等级的解决方案,其中我正在解决一个问题,要求从必须首先转换为嵌套列表的输入中打印得分第二高的人的姓名。
我理解代码中的所有逻辑和大部分代码,但为什么在 for 循环中使用下划线(_)。如果有不同的概念,请解释一下代码。
marksheet = []
for _ in range(0,int(input())):
marksheet.append([input(), float(input())])
second_highest = sorted(list(set([marks for name, marks in marksheet])))[1]
print('\n'.join([a for a,b in sorted(marksheet) if b == second_highest]))
Run Code Online (Sandbox Code Playgroud) 我的目标是以无序方式存储来自用户的许多输入。所以,我决定使用set. 我到目前为止的代码是:
a = input()
b = input()
c = input()
d = input()
all = a, b, c, d
print(set(all))
Run Code Online (Sandbox Code Playgroud)
但是,我不想像input()上面那样重复几次。有没有办法实现这一目标?
python ×9
python-3.x ×3
input ×2
colors ×1
loops ×1
python-2.7 ×1
python-3.7 ×1
python-idle ×1
scikit-learn ×1
set ×1
syntax ×1