这些代码行的区别和用途是什么?

2024-03-29 07:30:04 发布

您现在位置:Python中文网/ 问答频道 /正文

第一行代码:

for i in list:
   print(i)

第二行代码:

print(i for i in list)

我会用它们做什么


Tags: 代码inforlistprint我会
3条回答

第一种方法是循环遍历列表并逐个打印元素:

l = [1, 2, 3]
for i in l:
    print(i)

输出:

1
2
3

第二种方法list comprehension创建一个可以存储的iterable(列表、字典等)

l = [i for i in l]
print( l ) #[1, 2, 3]
print( l[0] ) #1
print( l[1:] ) #[2, 3]

输出:

[1, 2, 3]
1
[2, 3]

第二个用于对所有元素执行1项操作,例如,将所有元素从字符串转换为int:

l = ['1', '2', '3']
l = [int(i) for i in l] #now the list is [1, 2, 3]

循环更适合做很多事情:

for i in range(4):
    #Code
    #more code
    #lots of more code
    pass

你可以自己看看有什么不同。 第一个循环遍历range,然后打印整数

>>> for i in range(4):
...     print(i)
...
0
1
2
3

第二个是生成器表达式

>>> print(i for i in range(4))
<generator object <genexpr> at 0x10b6c20f0>

迭代如何在生成器中工作。Python生成器是创建迭代器的一种简单方法

简单地说,生成器是一个返回对象(迭代器)的函数,我们可以对其进行迭代(一次迭代一个值)

>>> g=(i for i in range(4))
>>> print(g)
<generator object <genexpr> at 0x100f015d0>
>>> print(next(g))
0
>>>
>>> print(next(g))
1
>>> print(next(g))
2
>>> print(next(g))
3
>>> print(next(g))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration


>>> g=(i for i in range(4))
>>> for i in g:
...     print(i)
...
0
1
2
3
>>> for i in g:
...     print(i)
...
>>>
>>>

在python3中,可以使用元组解包来打印生成器。如果这就是你想要的

>>> print(*(i for i in range(4)))
0 1 2 3

第一个代码片段将在列表上迭代,并为循环的每次传递打印i的值。在大多数情况下,您会希望使用类似的方式打印列表中的值:

my_list = list(range(5))
for i in my_list:
    print(i)
0
1
2
3
4

第二个代码段将计算print语句中的表达式并打印结果。由于print语句中的表达式i for i in my_list的计算结果是生成器表达式,因此将输出该生成器表达式的字符串表示形式。我想不出任何现实世界的情况下,这是你想要的结果

my_list = list(range(5))
print(i for i in my_list)
<generator object <genexpr> at 0x0E9EB2F0>

相关问题 更多 >