Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的二维列表填充_Python_List - Fatal编程技术网

Python中的二维列表填充

Python中的二维列表填充,python,list,Python,List,我正在用二维列表和数字来完成这个任务。任务是: 使用存储华氏温度的二维列表创建表格 温度和等效摄氏温度。使用以下命令 华氏温度范围:-10到100,以10为增量 我一直在尝试用数字填充二维列表的第一列——10到100。到目前为止,我所拥有的: ROWS = 11 COLS = 2 def main(): list = [[0,0], [0,0], [0,0], [0,0], [0,0],

我正在用二维列表和数字来完成这个任务。任务是:

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

您要找的是:

这将产生:

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

最后,a将使您的数据结构更有用:

conversion = {temperature: inCelsius(temperature) for temperature in range(-10, 110, 10)}
这意味着您可以使用
转换
作为“预计算缓存”来查找以摄氏度为单位的费恩海特温度值:

>>> conversion[10]
-15.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]]
使用该选项可以修改在主函数中创建的现有列表。您可能应该使用for循环

让事情变得更好

(如果您赶时间,请忽略)

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

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

  • 使用更多用户定义的函数。将所有内容都放在main中并不能真正帮助您,因为这与在没有main()函数的情况下键入所有内容基本相同。现在,我假设你将来会做更多的函数,如果是这样的话,就忽略这个

  • 使用乘法运算符可以更容易地定义在每个“槽”中包含相同对象的非常长的列表。例如,您希望创建一个包含10个对象的列表,所有对象都是整数
    42
    。您可以只做
    listA=[42]*10
    ,而不必输入这些内容。这就节省了很多时间

  • 用名称
    list
    定义列表是一个非常糟糕的主意。如果以后要使用
    list()
    函数,该怎么办?您会遇到一个可怕的
    类型错误:“[some type]”对象不可调用。因此,不要使用
    list
    作为名称,而是将其更改为类似
    temperatures
    或其他更具描述性的名称


您当然不希望在两个循环中使用相同的变量
i
。这不太好用。等等,为什么是-10华氏度?我以为你被要求做10到100华氏度的测试。那是个打字错误。从-10开始。所以列表理解基本上意味着您能够在定义列表的同一行中添加for循环?这不是我们书中的内容,也不是我们在课堂上讨论过的内容,但我相信教授会接受(希望如此)。谢谢你的帮助是的。。。虽然它也被视为一种更“自然”的表达方式,表达“我想要一个由
y
元素组成的列表,用于
y
范围/列表/集合中的每个元素”。是的,你的方式似乎更容易记住,更符合逻辑。我很感激,我想有人觉得你的答案不太有效。与纳撒尼尔的回答相比,我有点同意(但不是我的反对票)。您不需要创建整个列表,然后使用索引逐个分配每个值。这需要太多的代码。Nathaniel使用列表理解的解决方案简短、高效且优雅。@vmonteco您可以使用for循环来分配每个值。它不仅更容易阅读,而且应该更容易理解。但这是我的看法。
>>> listC = [[1, 2],[3, 4]]
>>> listC
[[1, 2], [3, 4]]
>>> listC[1][1] = 100
>>> listC
[[1, 2], [3, 100]]