如何使用基本操作更改列表中的值?

时间:2013-05-12 20:45:07

标签: python arrays list math python-3.x

好的,我自己做了挑战,所以我可以做一些编程。

但是我遇到了一些问题

adtprice = {19.99 , 49.99}
chldprice = adtprice * (3/4) - 7.5

这是错误我得到的结果。

Traceback (most recent call last):
File "C:/Users/Owner/Desktop/Programming Scripts/park.py", line 2, in <module>
chldprice = adtprice * (3/4) - 7.5
TypeError: unsupported operand type(s) for *: 'set' and 'float'

我希望它简单易用,因为我会经常使用adtprice和chldprice。

5 个答案:

答案 0 :(得分:4)

adtprice = [19.99 , 49.99]
chldprice = [a * (3.0/4) - 7.5 for a in adtprice]

答案 1 :(得分:2)

这可能是您正在寻找的。首先,一个集合不能乘以数字,你可以使用列表理解而3/4只返回0(假设Python 2.x)。我假设你想要3.0/4

>>> adtprice = [19.99 , 49.99]
>>> chldprice = [price*(3.0/4) - 7.5 for price in adtprice]
>>> chldprice
[7.4925, 29.9925]

答案 2 :(得分:1)

我认为您想要的是计算每个成人价格的子价格。你没有列表,只有一个集合,所以这应该有帮助:

adult_prices = [19.99, 49.99]
child_prices = []

for price in adult_prices:
    child_price = price * (3.0/4.0) - 7.5
    child_prices.append(child_price) # Add each child price to the array
    print("For adult price {}, child price is {}".format(price, child_price))

 print(adult_prices)
 print(child_prices)

答案 3 :(得分:1)

首先,你有一个集合,而不是一个列表。使用方括号创建列表而不是花括号。

正如其他人所提到的,你需要对列表中的各个元素进行操作。

您可以使用列表推导

来完成此操作
adtprice  = [19.99, 49.99]
chldprice = [p * (3./4) - 7.5
             for p in adtprice]

或使用map,如果您愿意:

adtprice  = [19.99, 49.99]
chldprice = map(lambda p: p * (3./4) - 7.5,
                adtprice)

如果您发现自己想要对序列执行这些类型的批量操作,请考虑使用numpy。它是一组库,可以简洁有效的方式有效地处理矩阵和矢量数学。例如:

adtprice  = numpy.array([19.99, 49.99])
chldprice = adtprice * (3./4) - 7.5

答案 4 :(得分:1)

虽然其他答案可行,但如果您想对值序列实际进行数学运算,我建议使用the numpy library。它确实非常出色。以下是使用numpy数组的代码:

import numpy as np

adult_prices = np.asarray([19.99, 49.99])
child_prices = adult_prices * (3.0/4) - 7.5  # math operations work item by item

print(child_prices) # prints "array([  7.4925,  29.9925])"

你可以用类似的方式做更多事情。例如,如果您只想在小数位后面两位数,则可以舍入结果:

child_prices = np.round(adult_prices * (3.0/4) - 7.5, 2)

print(child_prices) # prints "array([  7.49,  29.99])"