拉入或拉出对python的理解

2024-04-25 04:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

list(zip(['A','B','C'], [x for x in range(1,4)]))

我想重写上面的内容,让它在理解中发挥作用。下面是一个尝试:

[list(zip(['A','B','C'], x) for x in range(1,4))]

或者 [zip(['A','B','C'], x) for x in range(1,4)]

它不起作用,出现了一个类型错误:zip参数#2必须支持迭代

我能知道哪里出了问题吗?你知道吗


Tags: in类型内容for参数错误rangezip
3条回答

你也可以用

>>> some_list = ['A', 'B', 'C']
>>> enumerate(some_list)

尽管这会给你相反的顺序,从零开始,作为一个iteratable而不是list(0, 'A'), (1, 'B'), (2, 'C')(Interable通常更有效)。如果您特别希望从1开始,可以传入要枚举的起始值作为第二个参数,然后还可以转换为列表:

>>> list(enumerate(some_list, 1))
[(1, 'A'), (2, 'B'), (3, 'C')]

不过,这仍然使这两对按与问题相反的顺序排列。你知道吗

当您希望从列表中获取索引和元素时,此技术很常见:

>>> for i, c in enumerate('ABC'):
...     print i, c
...
0 A
1 B
2 C

[x for x in range(1,4)]只不过是list(range(1, 4)),所以使用:

list(zip(['A', 'B', 'C'], range(1, 4)))

就这样吧。你知道吗

如果要使用列表理解,请替换list()调用:

[(x, y) for x, y in zip(['A', 'B', 'C'], range(1, 4))]

但这和内部列表理解一样多余。你知道吗

您要做的是将单个元素传递给zip()函数,该函数只接受序列。你知道吗

实际上,您可以使用^{}的能力压缩传递的参数:

>>> map(None, ['A','B','C'], range(1,4)) # For python 2.x only
[('A', 1), ('B', 2), ('C', 3)]

代码的错误是,它将数字传递给zip的第二个参数,而不是迭代器。你知道吗

相关问题 更多 >