首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的二维列表填充

Python中的二维列表填充
EN

Stack Overflow用户
提问于 2016-04-15 00:01:14
回答 2查看 337关注 0票数 4

我正在努力使用二维列表来完成这个任务,然后用数字填充它们。任务是:

使用一个二维列表创建一个表,该列表存储华氏温度和等效的摄氏温度。使用以下华氏温度范围:-10至100递增10。

我被困在我的二维列表的第一列的数字-10到100。到目前为止我所拥有的是:

代码语言:javascript
运行
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2016-04-15 00:04:36

你要找的是列表理解

代码语言:javascript
运行
复制
def inCelsius(temperature):
    return (temperature / 2) - 20

x = [[temperature, inCelsius(temperature)] for temperature in range(-10, 110, 10)]

这产生了:

代码语言:javascript
运行
复制
>>> 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()将在指定位置插入所提供的项。这意味着它会增加你的列表的大小--除非你是从零开始增加你的二维列表,否则你是不想要的。

最后,词典理解将使您的数据结构更有用:

代码语言:javascript
运行
复制
conversion = {temperature: inCelsius(temperature) for temperature in range(-10, 110, 10)}

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

代码语言:javascript
运行
复制
>>> conversion[10]
-15.0

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

票数 3
EN

Stack Overflow用户

发布于 2016-04-15 00:23:10

对于列表列表,最好通过对列表本身进行索引来为特定索引分配内容。老实说,我从来没有使用过.insert()方法。(我不认为这有什么意义,因为否则您只需要使用list连接。)

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

解决问题

首先,学习如何索引列表(也是列表列表)。你可能还没有学到这一点,或者你只是忘了使用它。下面是一个例子:

代码语言:javascript
运行
复制
>>> 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"

这有什么用?您可以通过这种方式直接将项分配到列表中。例如:

代码语言:javascript
运行
复制
>>> 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()函数,怎么办?你会受到可怕的TypeError: '[some type]' object is not callable的欢迎。因此,与其使用list作为名称,不如将其更改为类似于temperatures或其他更具描述性的内容。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36636074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档