Python 以100为一组获取数组的值
在下面的代码中,ids是一个数组,它包含friendslist中所有用户的steam64 ID。现在根据steam web api文档,GetPlayerSummaries只获取100个逗号分隔的steam 64 ID的列表。有些用户有100多个朋友,我不希望每次调用API时运行200次for循环,而是希望以100个steam id为一组的数组。在速度方面,最有效的方法是什么 我知道我可以使用ids[0:100]来获取数组的前100个元素,但是对于一个包含230个用户的好友列表,我如何做到这一点呢Python 以100为一组获取数组的值,python,arrays,steam-web-api,Python,Arrays,Steam Web Api,在下面的代码中,ids是一个数组,它包含friendslist中所有用户的steam64 ID。现在根据steam web api文档,GetPlayerSummaries只获取100个逗号分隔的steam 64 ID的列表。有些用户有100多个朋友,我不希望每次调用API时运行200次for循环,而是希望以100个steam id为一组的数组。在速度方面,最有效的方法是什么 我知道我可以使用ids[0:100]来获取数组的前100个元素,但是对于一个包含230个用户的好友列表,我如何做到这一点
def getDescriptions(ids):
sids = ','.join(map(str, ids))
r = requests.get('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+API_KEY+'&steamids=' + sids)
data = r.json();
...
利用answer中的代码,您可以将其分为100人或更少的组,用于最后一个朋友循环
def chunkit(lst, n):
newn = int(len(lst)/n)
for i in xrange(0, n-1):
yield lst[i*newn:i*newn+newn]
yield lst[n*newn-newn:]
def getDescriptions(ids):
friends = chunkit(ids, 3)
while (True):
try:
fids = friends.next()
sids = ','.join(map(str, fids))
r = requests.get('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+API_KEY+'&steamids=' + sids)
data = r.json()
# Do something with the data variable
except StopIteration:
break
这将创建分解为3秒参数的迭代器,用于chunkit组。我选择了3,因为好友列表的基本大小是250。你们可以从post获得更多的规则,但这是一个安全的开始。您可以根据需要微调该值
使用此方法,您的数据值将在每个循环中被覆盖。确保在指定的位置对其进行处理。我有一个简单的选择,只需在每个while/loop上减小列表大小,直到用尽:
def getDescriptions(ids):
sids = ','.join(map(str, ids))
sids_queue = sids.split(',')
data = []
while len(sids_queue) != 0:
r = requests.get('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+ \
API_KEY+'&steamids=' + ','.join(sids_queue[:100])
data.append(r.json) # r.json without (), by the way
# then skip [0:100] and reassign to sids_queue, you get the idea
sids_queue = sids_queue[101:]
可能的重复使用此代码会更容易吗?def chunksiterl,chunks:i,j,n=0,0,0 rl=[],而n