Python中的二维列表填充

时间:2016-04-15 00:01:14

标签: python list

我正在使用二维列表并使用数字填充这个作业。作业是:

  

使用存储华氏温度的二维列表创建表格   温度和相当的摄氏温度。使用以下内容   华氏温度范围:-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()

2 个答案:

答案 0 :(得分:3)

您要找的是list comprehension

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的list insert()会在指定的位置插入提供的项目。这意味着它将增加列表的大小 - 除非你从头开始增加二维列表,否则你不需要它。

最后,dictionary comprehension会使您的数据结构更有用:

conversion = {temperature: inCelsius(temperature) for temperature in range(-10, 110, 10)}

这意味着您可以使用conversion作为“预先计算的缓存”来查找以摄氏度为单位的华氏温度值:

>>> conversion[10]
-15.0

这意味着您每个值只计算一次温度。如果转换很复杂或处理器密集,这是一种非常方便的优化。

答案 1 :(得分:0)

对于列表列表,最好通过索引列表本身来将事物分配给特定索引。说实话,我还没有使用.insert()方法。 (我没有看到它的重点,因为否则你可以利用列表连接。)

让我们将这个答案分成几个部分:

解决问题

首先,学习如何索引列表(也是列表列表)。您可能要么还没有学到这一点,要么就是忘了使用它。这是一个例子:

>>> 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]]

使用它来修改您在main函数中创建的预先存在的列表。你应该使用for循环。

让事情变得更好

(如果你赶时间,请不要理会)

有些方法可以在以后编写更大,更复杂的项目时帮助您,以便它可以帮助您在将来更快,更有效地进行调试。

  • 在嵌套for循环中使用变量i两次并不是一个好主意。它可以让你很容易混淆,因为你不确定你指的是哪个i

  • 使用更多用户定义的函数。将所有内容放在main中并不能真正帮助你,因为它与没有main()函数的所有内容基本相同。截至目前,我假设你将来会发挥更多功能,所以如果是这样的话,就不要理会这一点。

  • 使用乘法运算符可以更轻松地定义包含每个“槽”中相同对象的超长列表。因此,例如,您要创建一个包含10个对象的列表,所有这些对象都是整数42。您可以刚刚完成listA = [42] * 10,而不是输入。这只会节省很多时间。

  • 定义名称为list的列表是一个非常糟糕的主意。如果您想稍后使用list()功能怎么办?你会受到一个可怕的TypeError: '[some type]' object is not callable的欢迎。因此,不要使用list作为名称,而是将其更改为temperatures或更具描述性的其他内容。