我正在努力使用二维列表来完成这个任务,然后用数字填充它们。任务是:
使用一个二维列表创建一个表,该列表存储华氏温度和等效的摄氏温度。使用以下华氏温度范围:-10至100递增10。
我被困在我的二维列表的第一列的数字-10到100。到目前为止我所拥有的是:
ROWS = 11
COLS = 2
def main():
list = [[0,0],
[0,0],
[0,0],
[0,0],
[0,0],
[0,0],
[0,0],
[0,0],
[0,0],
[0,0],
[0,0]]
for i in range(ROWS):
for i in range(-10,110,10):
list.insert(0, i)
print(list)
main()发布于 2016-04-15 00:04:36
你要找的是列表理解
def inCelsius(temperature):
return (temperature / 2) - 20
x = [[temperature, inCelsius(temperature)] for temperature in range(-10, 110, 10)]这产生了:
>>> x
[[-10, -25.0], [0, -20.0], [10, -15.0], [20, -10.0], [30, -5.0], [40, 0.0], [50, 5.0], [60, 10.0], [70, 15.0], [80, 20.0], [90, 25.0], [100, 30.0]]显然,您的inCelsius()转换会有所不同。
请注意,您不需要提前设置列表;列表理解为您提供了帮助。还请注意,Python的insert()将在指定位置插入所提供的项。这意味着它会增加你的列表的大小--除非你是从零开始增加你的二维列表,否则你是不想要的。
最后,词典理解将使您的数据结构更有用:
conversion = {temperature: inCelsius(temperature) for temperature in range(-10, 110, 10)}这意味着您可以使用conversion作为“预先计算的缓存”来查找以摄氏度为单位的Farenheit温度的值:
>>> conversion[10]
-15.0这意味着你只计算每个值一次的温度。如果转换复杂或处理器密集,这是一种方便的优化。
发布于 2016-04-15 00:23:10
对于列表列表,最好通过对列表本身进行索引来为特定索引分配内容。老实说,我从来没有使用过.insert()方法。(我不认为这有什么意义,因为否则您只需要使用list连接。)
让我们把这个答案分成几个部分:
解决问题
首先,学习如何索引列表(也是列表列表)。你可能还没有学到这一点,或者你只是忘了使用它。下面是一个例子:
>>> listA = ["Hello", "Hi", "Greetings"]
>>> listA[1] # Returns the object at index 1 of the list, or the second object
"Hi"
>>> listB = [["1st object in list 1", "2nd object in list 1"], ["1st object in list 2", "2nd object in list 2"]]
>>> listB[0][1] # Returns the object at index 1 of the object at index 0 of the larger list, which in this case would be:
"2nd object in list 1"这有什么用?您可以通过这种方式直接将项分配到列表中。例如:
>>> listC = [[1, 2],[3, 4]]
>>> listC
[[1, 2], [3, 4]]
>>> listC[1][1] = 100
>>> listC
[[1, 2], [3, 100]]使用它可以修改在主函数中创建的预先存在的列表。您可能应该使用for循环。
使事情变得更好
(如果你赶时间的话,不要理会)
在以后编写更大和更复杂的项目时,有一些方法可以帮助您,以便将来帮助您更快、更有效地调试。
i并不是一个好主意。这很容易让您感到困惑,因为您无法确定您指的是哪个i。42。您本可以只完成listA = [42] * 10,而不是键入它。这只会节省很多时间。list的列表是一个非常糟糕的主意。如果您希望稍后使用list()函数,怎么办?你会受到可怕的TypeError: '[some type]' object is not callable的欢迎。因此,与其使用list作为名称,不如将其更改为类似于temperatures或其他更具描述性的内容。https://stackoverflow.com/questions/36636074
复制相似问题