Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
662 views
in Technique[技术] by (71.8m points)

python - Calling list() twice on reversed() returns an empty list the second time

I don't understand the result of this code:

aa = 'hello, world'
bb = reversed(aa)
print(bb)
print(list(bb))
print(bb)
dd = list(bb)
print(dd)
print(''.join(dd))

The result:

<reversed object at 0x025C8C90>
['d', 'l', 'r', 'o', 'w', ' ', ',', 'o', 'l', 'l', 'e', 'h']
<reversed object at 0x025C8C90>
[]

Why is dd []?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

That's because reversed creates an iterator, which is already spent when you're calling list(bb) for the second time.

aa = 'hello, world'
bb = reversed(aa)    # Creates an iterator, not a list
print(bb)            # Prints "<reversed object at 0x10c619b90>" (that's the iterator)
print(list(bb))      # Pops items from the iterator to create a list, then prints the list
print(bb)            # At this point the iterator is spent, and doesn't contain elements anymore
dd = list(bb)        # Empty iterator -> Empty list ([])
print(dd)
print(''.join(dd))
print('----------')

To fix that, just change reversed(aa) by list(reversed(aa)).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...