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

3

好的,我接受了这个挑战,以便进行一些编程。

然而,我遇到了一些问题。

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。


1
你在这里想做什么?你不能用一个数字乘以一个“集合”。 - Ashwini Chaudhary
1
你究竟在尝试做什么?顺便说一句,Python有时候可以理解我们的语言;尝试与它交流吧。 - Maroun
{7.4925, 29.9925} 不是一个 array,而是一个 set。这是不同的。 - stalk
Python版本是3.2.3。 - Bugboy1028
你提供的所有答案都很有用。然而我不得不选择其中一个答案... - Bugboy1028
显示剩余4条评论
5个回答

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

1
+1。但是如果你想让我保持我的点赞,你需要执行3.0/4 - Maroun
可能3/4不是正确的方式,正如其他人所说。因为3/4 == 0。必须像3./4这样。 - stalk
不需要使用3.0/4,因为OP正在使用py3.x。 - Ashwini Chaudhary
@MarounMaroun 这里有更好的答案,将在一分钟内删除。 - YXD

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]

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)

实际上,这不是我想要的,但它可能对其他人有用。 - Bugboy1028

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

括号:();方括号:[],有时称为“方括号”;花括号:{},有时称为“大括号”,以强调区别;“尖括号”:<>,重载使用<和>实体或“小于”和“大于”符号。在Python中:()用于元组(和生成器表达式),[]用于列表(和列表推导式),{}用于字典和集合(以及它们的生成器表达式)。“尖括号”在Python的语法中没有被使用(作为这样的)。 - Jim Dennis
@JimDennis,我知道,但他正在解释3种不同的方法来做到这一点。 - Bugboy1028
只是澄清Python中各种分隔符对及其用法的接受名称。{}不是“尖角”括号。 - Jim Dennis
@JimDennis 是正确的。我在说“尖括号”时打错了。我想说的是花括号。 - Mr Fooz

1

虽然其他答案也能起作用,但如果您想对数值序列进行数学运算,我建议使用numpy。它非常擅长这样做。以下是使用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])"

我需要下载numpy吗? - Bugboy1028
1
@Bugboy1028:是的,不幸的是numpy不是Python标准库的一部分。 - Blckknght

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接