我在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 '
答案 0 :(得分:1)
您可以使用[:numshow]
内部生成器从api中仅获取numshow
个用户。
usershow = (api.ShowUser(user_id=usershow) for usershow in x[:numshow])
for user in usershow:
print(user)
编辑:,因为@ TigerhawkT3通知x
为set
,因此您必须将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:如果您将usershow
与for
一起使用,那么您不需要next()
而我只能使用next()
在一个例子中。