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

时间:2016-12-26 06:33:47

标签: 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 + ' users'

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

for num in usershow[:numshow]:
    next(usershow)

我收到以下错误: TypeError:' generator'对象没有属性' getitem '

1 个答案:

答案 0 :(得分:1)

您可以使用[:numshow]内部生成器从api中仅获取numshow个用户。

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

for user in usershow:
    print(user)

编辑:,因为@ TigerhawkT3通知xset,因此您必须将x转换为list。正确的版本是

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)

BTW:如果您将usershowfor一起使用,那么您不需要next()而我只能使用next()在一个例子中。