我正在巴黎开展一项名为Velib的自行车共享计划。下面显示的R_0列表包含巴黎所有自行车站的所有信息,我试图量化每个自行车站在一定时间内自行车价值的变化,以查看哪个自行车站拥有最多的用户和等等。
lR0是R_0的长度。我做的是制作2个列表,然后迭代。第一个列表Lt0包含时间t的自行车的值和时间t + T的第二个列表Lt1,我创建了一个新的列表I_0,在时间T中添加了自行车的abs(变化)。所以最后我会得到一个列表,其中包含整个时期内自行车的近似变化(如果T - > 0,则会给出确切的变化)。
不幸的是,我的列表I_0对于所有迭代都是[0,0,...,0,0],即使我在每次迭代时刷新每个站点的自行车数量。刷新R_0有问题吗? python实际上是否每次使用从网站发回的旧j子列表?我的代码顺序是否有问题?
I_0=np.zeros(lR0)
Lt1=np.zeros(lR0)
for k in range (0,lR0-1):
Lt1[k]=R_0[k]['available_bikes']
Lt0=Lt1
c=0
while c<288:
c=c+1
R_0_json = requests.get('https://api.jcdecaux.com/vls/v1/stations?contract=Paris&apiKey=an apikey')
R_0=R_0_json.json()
lR0=len(R_0)
for k in range (0,lR0-1):
I_0[k]=I_0[k]+abs(Lt1[k]-Lt0[k])
Lt0[k]=Lt1[k]
Lt1[k]=R_0[k]['available_bikes']
time.sleep (150)
print(I_0)
R_0看起来像这样:
[{'last_update': 1497175405000, 'status': 'OPEN', 'bike_stands': 50, 'banking':
True, 'available_bikes': 6, 'name': '31705 - CHAMPEAUX (BAGNOLET)', 'bonus': Tru
e, 'number': 31705, 'contract_name': 'Paris', 'address': 'RUE DES CHAMPEAUX (PRE
S DE LA GARE ROUTIERE) - 93170 BAGNOLET', 'position': {'lng': 2.416170724425901,
'lat': 48.8645278209514}, 'available_bike_stands': 43}, {'last_update': 1497175
566000, 'status': 'OPEN', 'bike_stands': 33, 'banking': True, 'available_bikes':
17, 'name': '10042 - POISSONNIÈRE - ENGHIEN', 'bonus': False, 'number': 10042,
'contract_name': 'Paris', 'address': "52 RUE D'ENGHIEN / ANGLE RUE DU FAUBOURG P
OISSONIERE - 75010 PARIS", 'position': {'lng': 2.348395236282807, 'lat': 48.8724
2006305313}, 'available_bike_stands': 15}, ...]
答案 0 :(得分:0)
您可以尝试以下方式:
I_0.values()
如果您只是对值感兴趣而不是对站的映射感兴趣,那么您可以使用I_0 = [0] * len(R_0)
for c in xrange(288):
R_0 = get_json()
for k, station in enumerate(R_0):
available_bikes_now = station['available_bikes']
I_0[k] += abs(available_bikes_now - available_bikes_before[station['name']])
available_bikes_before[station['name']] = available_bikes_now
time.sleep(150)
print(I_0)
来访问这些值。但是,它们不会以可预测的方式进行排序。如果订单很重要,您可以像这样修改上面的代码:
var arr = [1,2,4,5,1,7,8,9,2,3]
MAX_SUM = 10,
MIN_SUBSET_LEN = 2,
RESULT_LEN = 5;
//remove duplicates
var uniqeSet = arr.filter(function(value, index){
return this.indexOf(value) == index
},arr);
// a function to get all subset which
// their length are greater than minLength and
// sum of values are little than maxSum
var combine = function(sourceArr, minLength, maxSum) {
var fn = function(n, src, got, all, sum) {
if(sum <= maxSum){
if (n == 0) {
if (got.length > 0) {
all.push({arr:got,sum:sum});
}
return;
}
for (var j = 0; j < src.length; j++) {
var tempSum = sum
fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all, sum + src[j]);
}
}
return;
}
var all = [];
for (var i = minLength; i < sourceArr.length; i++) {
fn(i, sourceArr, [], all, 0);
}
return all;
}
var result = combine(uniqeSet, MIN_SUBSET_LEN, MAX_SUM);
var sortedSliced = result.sort(function(a1, a2){
return a2.sum - a1.sum;
}).slice(0, RESULT_LEN).map(function(m){return m.arr;});
console.log(JSON.stringify(sortedSliced));
请注意I_0的更改:它现在是一个列表,我们使用索引k来填充其值。其余代码保持不变。