当前位置: 首页 > 面试题库 >

列表中的for循环在Python中做什么?

笪健
2023-03-14
问题内容

有人可以向我解释此Python代码段的最后一行吗?

Cell只是另一类。我不明白如何使用for循环将Cell对象存储Column对象中。

class Column(object):

    def __init__(self, region, srcPos, pos):

        self.region = region
        self.cells = [Cell(self, i) for i in xrange(region.cellsPerCol)] #Please explain this line.

问题答案:

您要询问的代码行是使用列表推导创建一个列表,并将在此列表中收集的数据分配给self.cells。相当于

self.cells = []
for i in xrange(region.cellsPerCol):
    self.cells.append(Cell(self, i))

说明

为了最好地解释它是 如何 工作的,可以使用一些简单的示例来帮助您 理解
所拥有的代码。如果您要继续使用Python代码,则将再次遇到列表理解,您可能想自己使用它。

注意,在下面的示例中,两个代码段都是 等效的 ,因为它们创建了一个list存储在list中的值myList

例如:

myList = []
for i in range(10):
    myList.append(i)

相当于

myList = [i for i in range(10)]

列表理解也可能更加复杂,因此,例如,如果您有确定值是否应放入列表中的条件,则也可以使用列表理解来表达这一点。

本示例仅在列表中收集偶数编号的值:

myList = []
for i in range(10):
    if i%2 == 0:     # could be written as "if not i%2" more tersely
       myList.append(i)

和等效的列表理解:

myList = [i for i in range(10) if i%2 == 0]

最后两个注意事项:

  • 您可以“嵌套”列表理解,但是很快就会难以理解:)
  • 列表理解将比等效的for循环运行得更快,因此通常是关注效率的常规Python程序员的最爱。

好的,最后一个示例显示您还可以将函数应用于列表中要遍历的项目。这使用float()将字符串列表转换为float值:

data = ['3', '7.4', '8.2']
new_data = [float(n) for n in data]

给出:

new_data
[3.0, 7.4, 8.2]


 类似资料:
  • 我有一个两个项目的列表,每个项目是一个文本字符串。我想围绕这两个项目循环,如果一个单词不在一组单词中,则基本上删除它。但是,下面的代码将所有单词放在一起,而不是创建两个单独的项。我希望我的更新列表包含两个项目,每个原始项目对应一个im更新:

  • 我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两

  • 问题内容: 现在,我知道在迭代循环中修改列表是不安全的。但是,假设我有一个字符串列表,并且我想剥离字符串本身。可变值的替换是否算作修改? 问题答案: 它被认为是不良形式。如果需要保留对列表的现有引用,请改用列表理解和切片分配。

  • 问题内容: 我有一个清单 我想在如下所示的for循环中删除此列表中的元素: 但这是行不通的。我能做什么? 问题答案: 使用循环遍历列表时,不允许从列表中删除元素。 重写代码的最佳方法取决于你要执行的操作。 例如,你的代码等效于: 另外,你可以使用while循环: 我正在尝试删除符合条件的项目。然后我转到下一个项目。 你可以将每个不符合条件的元素复制到第二个列表中: 或者,你可以使用filter或列

  • 问题内容: 嗨,我有一个问题,在遍历python中的列表时我似乎无法删除项目,这就是我得到的:如果用户在for循环中被问到要删除的问题时输入n或N,则应该删除标题,问题在于,当所有操作完成后,所有项目仍然存在,并且没有任何项目被移除… 问题答案: 以下代码将解决您的问题。您必须遍历列表的副本。您无法从要迭代的列表中删除项目。

  • 问题内容: 我目前有一些这样的代码: 我想发生的事情是for循环迭代并用其对应的字母替换任何大于10的值。但是,我当前的代码只是更改,而不是列表中的原始值。例如,如果设置为15,则代码始终运行并设置为,但不会更改为,而是保持为15。如何解决此问题? 问题答案: 对于循环的每次迭代,变量只会被分配一个项的值的副本,因此对所做的更改将不会反映在。 您应该更新可以通过以下函数生成的via索引项: