限制要在Python中显示的列表项的数量

限制要在Python中显示的列表项的数量,python,Python,我在id1和id2中有很多用户。我希望能够限制由于用户输入而显示的用户数量。例如,如果x中有100。我想能够输入25,只显示25个用户 id1 = ([u.id for u in userlist1]) id2 = ([u.id for u in userlist2]) x = set(id1) - set(id2) numshow = raw_input('How many do you want to show? ') print 'Now showing ' + numshow + '

我在id1和id2中有很多用户。我希望能够限制由于用户输入而显示的用户数量。例如,如果x中有100。我想能够输入25,只显示25个用户

id1 = ([u.id for u in userlist1])
id2 = ([u.id for u in userlist2])

x = set(id1) - set(id2)

numshow = raw_input('How many do you want to show? ')
print 'Now showing ' + numshow + ' users'

usershow = (api.ShowUser(user_id=usershow) for usershow in x)

for num in usershow[:numshow]:
    next(usershow)
我得到以下错误:
TypeError:“generator”对象没有属性“getitem

您可以在generator内部使用
[:numshow]
从api中仅获取
numshow
用户

usershow = (api.ShowUser(user_id=usershow) for usershow in x[:numshow])

for user in usershow:
    print(user)
编辑:因为@TigerhawkT3通知
x
set
,所以您必须将
x
转换为
列表
。正确的版本是

usershow = (api.ShowUser(user_id=usershow) for usershow in list(x)[:numshow])

for user in usershow:
    print(user)

或者您必须将生成器转换为列表

usershow = (api.ShowUser(user_id=usershow) for usershow in x)

for user in list(usershow)[:numshow]:
    print(user)
您也可以使用范围-但如果用户少于
numshow
,则会出现错误
StopIteration

usershow = (api.ShowUser(user_id=usershow) for usershow in x)

for num in range(numshow):
    user = next(usershow)
    print(user)

编辑:使用
islice
无需将任何内容转换为列表

import itertools

usershow = (api.ShowUser(user_id=usershow) for usershow in x)

for user in itertools.islice(usershow, numshow):
    print(user)


顺便说一句:如果你将
usershow
一起用于
,那么你就不需要
next()
,我只能在一个例子中使用
next()

使用
[]
-
usershow=[…]
或者在生成器内部使用
[:numshow]
(api.ShowUser(user\u id=usershow)对于x[:numshow])
@TigerhawkT3中的usershow,您是对的,我没有注意到
set()