嗨,我是编程的新手,我不知道如何编写一个循环,它将扩展一个空列表,其中包含范围(1,21)中先前数字的总和。所以列表应该是这样的(1,1 + 2,1 + 2 + 3等)
答案 0 :(得分:2)
l = range(1, 21)
print ([sum(l[:i]) for i in l])
#Output:
#[1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210]
要使其成为任何列表的通用名称,请转到
l = [3,4,5,6,7,12] # or l = range(1, 21)
print ([sum(l[:i]) for i in range(1,len(l)+1)])
#Output:
#[3, 7, 12, 18, 25, 37]
答案 1 :(得分:0)
>>> MyList = []
>>> for i in range(1 + 1,21):
... partial_sum = 0
... for j in range(1,i):
... partial_sum += j
... MyList.append(partial_sum)
...
>>> MyList
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190]
我在外部1+1
循环中使用for
来阻止列表开头的0
。我正在使用一笔金额来证明我将其视为start + 1
,而不是与1不同的起点。
这不是这是实现此目的的最佳方式,但只使用简单的循环和range()
,它是有效且相当简单的理解。使用sum()
和/或reduce()
可以产生更好的解决方案,但这超出了问题的范围。
答案 2 :(得分:0)
您可以对此问题应用递归方法:
let margin = {top: 20, right: 20, bottom:100, left:60}
let width = 800 - margin.left - margin.right
let height = 500 - margin.top - margin.bottom
let x = d3.scaleBand()
.rangeRound([0, width])
.padding(0.5);
let y = d3.scaleLinear().range([height, 0])
let xAxis = d3.axisBottom(x)
.tickFormat((d) => {
return d.x;
});
let yAxis = d3.axisLeft(y)
let svg = d3.select('.barGraph')
.append('svg')
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom)
.append('g')
.attr('transform', 'translate(" + margin.left + "." + margin.top + ")');
d3.json('https://api.myjson.com/bins/vkbjf', (data)=>{
x.domain(data.map((d)=>{
return d.name
}))
y.domain([0, d3.max(data, (d)=>{
return d.rank
})]);
svg.append('g')
.attr('class', 'x axis')
.attr('tranform', 'translate(0 " + height + ")')
.call(xAxis)
.selectAll('text')
.style('text-anchor', 'end')
.attr('dx', '-0.5em')
.attr('dy', '-55em')
.attr('y', 30)
.attr('transform', 'rotate(-45)');
svg.append('g')
.attr('class', 'y axis')
.call(yAxis)
.append('text')
.attr('transform', 'rotate(-90)')
.attr('y', 5)
.attr('dy', '0.8em')
.attr('text-anchor', 'end')
.text('Member Rank')
svg.selectAll('bar')
.data(data)
.enter()
.append('rect')
.style('fill', 'orange')
.attr('x', (d)=>{
return y(d.rank)
})
.attr('height', (d)=>{
return height - y(d.rank)
})
})
答案 3 :(得分:0)
它被称为前缀sums 或累积和。使用numpy
轻松完成,这是数字计算的事实标准。
import numpy as np
data = range(1, 21)
print(np.cumsum(data))
答案 4 :(得分:0)
胜利的标准库!
import itertools
x = range(1, 5)
list(itertools.accumulate(x))
输出:
[1, 3, 6, 10]