Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以100为一组获取数组的值_Python_Arrays_Steam Web Api - Fatal编程技术网

Python 以100为一组获取数组的值

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个用户的好友列表,我如何做到这一点

在下面的代码中,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