python 2.7 for循环生成列表

标签 python python-2.7

我在Python 2.7中测试过,两种风格是一样的。我的困惑是,当阅读第一个生成列表的方法时,我总是有点困惑 if i%2 == 0控制我们是否应该执行 i in range(100) 的整个循环,或i%2 == 0正在 i in range(100) 循环下。我有一个困惑,也许我过去写Java和C++,从那里思考方法。

寻求如何阅读列表生成代码的建议,通常模式是 [<something before loop> <the loop> <something after the loop>] ,在本例中“循环之前的内容”是 1 ,“循环”是 for i in range(100)而“循环之后的东西”是 i%2 == 0 .

还请教在Python 2.7中用方法1编写代码是否是好的编码风格?谢谢。

a = [1 for i in range(100) if i%2 == 0]

print a

a=[]
for i in range(100):
    if i%2==0:
        a.append(1)

print a

编辑 1

我还想比较使用xrange在显式循环中(与列表理解的第一种方法比较优缺点),例如,

a=[]
for i in xrange(100):
    if i%2==0:
        a.append(1)

print a

编辑2

a = [1 for i in xrange(100) if i%2 == 0]

最佳答案

1) 正如 python 2.7 中已经提到的,通常建议使用 xrange,因为它(就像在 C 中一样)只保留一个会递增的计数器。 相反,范围实际上是在内存中创建从 0 到 99 的整个列表! 也许这里你必须想,如果你需要包含 100 --> 那么请使用 101 ;)

2)你明白我的意思,问题是有效的,你必须认为操作确实会在循环“下”执行!!

请记住,列表理解对于创建所需的内容非常强大!无论如何要小心,在某些情况下不太容易阅读,特别是当您在内部使用多个变量(如 x,y 等)时。

我会选择你的第一行,只需处理数组的最小值和最大值。如前所述,也许您必须合并第 100 个元素,并且您可以使用 xrange 函数而不是 range 来加快速度。 a = [1 for i in range(100) if i%2 == 0]

3) 一个好的建议是在 xrange 和 while 循环上记录自己 --> 在 stackoverflow 上,您可以找到大量讨论来寻找上述两个操作的速度! (这只是建议)

希望这能澄清您的疑问!祝你有美好的一天!

关于python 2.7 for循环生成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40148422/

相关文章:

python - 如何检查 URL 是否可下载?

python - 如何在python中为Matrix选择特定的列

Python代码运行错误需要帮助。它给出错误 "cannot import name ' 键'”

python - 在 Python 中使用嵌套字典——将两个数据集与公共(public) 'key' 和不同的其他变量组合起来

python-2.7 - 为什么 "-m"需要 "python -m pip install ..."?

python - 将本地 python 脚本连接到远程 Spark Master

python - 更新 PyPI 包

python - 字母表和递归

python - 您如何从雅虎财经中提取每周历史数据?

python if语句字典与Series不兼容的索引器