如何在python中对数组中的选定元素求和?

How to sum the selected elements from an array in python? (Multiple Inputs)

代码如下:

1
2
3
4
5
6
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
x = raw_input()

for i, v in enumerate(PRICE):

print total price

例如,用户输入"1 3 2 2"所以x是我从用户那里得到的多个输入。我如何总结它们?答案应该是1100+1300+1200+1200=4800我想创建一个代码,即使我更改了输入,我仍然能够总结它们。如果我把x改为2,2,2,1,我的总数是4700。


您可以将用户输入转换为如下索引:

1
print sum(PRICE[int(a)] for a in x.split())

但是,只有当raw_input具有您所说的格式时,它才有效:整数被空白分割,当然,如果提供的值大于列表长度,它很容易出现IndexError: list index out of range

编辑:删除了评论中建议的中间列表创建


1
2
3
4
5
6
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
x = raw_input()

for i, v in enumerate(PRICE):

print total price

嗯,我被卡住了,我不能回答,但我能做点什么吗?

也许我可以打印一些东西给我更多的想法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
x = raw_input()
print x

for i, v in enumerate(PRICE):
    print i, v

>>>
you said 2
0 1000
1 1100
2 1200
3 1300
4 1400
5 1500

所以i从0到5,v是价格,他们说2。现在怎么办?

也许我现在可以把它们都加起来?价格是v,所以我把它们加起来……

1
2
3
4
5
6
7
8
9
10
11
12
13
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    v = v + v

print v

>>>
you said 3
3000

3000?3000是多少?哦,它来自最后一个,1500+1500。所以我不能用这样的V。

好吧,我知道清单,如果我这样做……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    TOTAL = TOTAL + v

print TOTAL

>>>
Traceback (most recent call last):
File"<interactive input>", line 1, in <module>
TypeError: can only concatenate list (not"int") to list

不,那是个错误。嗯…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    TOTAL = TOTAL + [v]

print TOTAL

>>>
you said 2
[1000, 1100, 1200, 1300, 1400, 1500]

这不是什么加起来的,只是复制的!真是浪费时间!

嗯,现在怎么样?我不知道,也许我会把我所有的东西都打印出来看看会发生什么:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    TOTAL = TOTAL + [v]
    print"x:", x,"i:", i,"v:", v,"TOTAL:", TOTAL


print TOTAL

>>>
you said 2
x: 2 i: 0 v: 1000 TOTAL:  [1000]
x: 2 i: 1 v: 1100 TOTAL:  [1000, 1100]
x: 2 i: 2 v: 1200 TOTAL:  [1000, 1100, 1200]
x: 2 i: 3 v: 1300 TOTAL:  [1000, 1100, 1200, 1300]
x: 2 i: 4 v: 1400 TOTAL:  [1000, 1100, 1200, 1300, 1400]
x: 2 i: 5 v: 1500 TOTAL:  [1000, 1100, 1200, 1300, 1400, 1500]
[1000, 1100, 1200, 1300, 1400, 1500]

看那个,在某个点,x是2,i是2。这就是他们输入的匹配我看到的。我想要那个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    if x == i:
        TOTAL = TOTAL + [v]

print TOTAL

>>>
you said 2
[]

什么?我只是看到他们是平等的,但没有起作用。太荒谬了,我讨厌它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> i = 1
>>> print i
1
>>> x = raw_input()
>>> print x
2
>>> raw_input() == 2
False

>>> help(raw_input)
Help on built-in function raw_input in module __builtin__:

raw_input(...)
    raw_input([prompt]) -> string

    Read a string from standard input.  The trailing newline...

哦,这提醒了我,我听说过弦。

1
2
3
4
5
6
>>> x = raw_input()
>>> help(x)
no Python documentation found for '2'
>>> help(i)
Help on int object:
...

…hmm googles原始输入、int对象、python、比较、读取

1
2
>>> raw_input() == str(i)
True

对!

现在我在哪里?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    if x == str(i):
        TOTAL = TOTAL + [v]

print TOTAL

>>>
you said 2
[1200]

这是有史以来最酷的事情。

*Google的"python add list",在python中找到一个数字列表sees sum()

1
2
3
4
>>> sum(PRICE)
7500
>>> sum(TOTAL)
1200

哦,但我不想用和,我想把它们加在循环中。

但至少现在我有一些用户选择的东西。

我还能做什么?我被困住了。

*认为

我刚才找到了str()。怎么样

1
2
>>> help(str)
[gibberish]

我不知道这是什么意思:(

嘿,再见!

1
2
3
4
5
6
7
8
9
10
11
12
>>> help(str)
Help on class str in module __builtin__:

class str(basestring)
 |  str(object='') -> string
 |
 |  Return a nice string representation of the object.
 |  If the argument is a string, the return value is the same object.
 |
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |

我刚用过==现在这里面全是==。

1
2
3
4
5
6
|  count(...)
|      S.count(sub[, start[, end]]) -> int
|
|      Return the number of non-overlapping occurrences of substring sub in
|      string S[start:end].  Optional arguments start and end are interpreted
|      as in slice notation.

嘿,count()在str里面做什么?我想数数!返回不重叠的偏航跳数。

1
2
3
4
5
6
7
|  find(...)
|      S.find(sub [,start [,end]]) -> int
|
|      Return the lowest index in S where substring sub is found,
|      such that sub is contained within S[start:end].  Optional
|      arguments start and end are interpreted as in slice notation.
|

发现,这是我认识的一个词,我刚才看到了int。为什么?哦,对了,救命啊(我)说了点关于内特的事。

找到什么东西了吗?返回在s中找到子字符串的最低索引。

并且…在我把它和x比较之前,我必须先把它

如果我

1
2
3
4
5
>>> x = raw_input()
>>> print x
2
>>> x.find
<built-in method find of str object at 0x0000000001E680A8>

Google内置方法

浏览结果

看到"如果x不是python int对象,它必须定义一个index()方法"

不看,只是注意到

1
2
3
4
5
6
>>> x.find()
{error}
>>> x.find(2)
{error}
>>> x.find(str(2))
0

我讨厌这个,真糟糕。

等。

几小时后。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    if x.find(str(i)) > -1:
        TOTAL = TOTAL + [v]

print TOTAL

>>>
you said 23
[1200, 1300]

哦,我的话,我发现用户输入的东西不止一个!

*小时后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PRICE = [1000, 1100, 1200, 1300, 1400, 1500]
TOTAL = []

x = raw_input()
print"you said", x

for i, v in enumerate(PRICE):
    if x.find(str(i)) > -1:
        TOTAL = TOTAL + [v]

print TOTAL

add_total = 0
for i, v in enumerate(TOTAL):
    add_total = int(add_total) + int(v)

print"Total is:", str(add_total)

>>>
you said 14
[1100, 1400]
Total is: 2500

!!!!!!!!!!!!!!!!!!!!!!!

这就是所有"尝试一下这个:整洁的解决方案:)"背后真正发生的事情。

知道答案的人都知道,因为他们经历了很多这样的事情。(或者也许只有我一个人?D:)。做了那么多会让你熟悉很多事情,也会让你想起你在其他地方看到的事情,"那不管用,我以前试过,这就是为什么……"的时刻。

不要避免受挫,直截了当。学会爱上它。