0

快速提问......有点随机。

我想找到一种方法来返回一个列表,其中包含一行python中单独列表中项目的所有长度...使用python 3.8 ...我尝试了以下方法:

需要处理的列表(是的,每个索引都必须包含在它自己的列表中,我知道这不是普通的或实用的......): tmp =[['one'], ['two'], ['three']]

我试过的代码:

lens = [len(item[a][0]) for a, item in enumerate(tmp)]

它返回的错误:

IndexError: list index out of range

...

当然,通常这样的声明: 在这里就足够了,如果我们有一个lens = [len(item) for item in tmp]包含子列表的列表,那效果很好......但是,如果我能抓住每个子索引的字符串长度,我会喜欢它在一行中。

对于我想象中的人会问:不,我不必在一行中这样做,而是与另一位程序员朋友就最快的方法进行了一场厚颜无耻的小辩论,我想知道这是否可能单行。不实用,我知道。

对我来说,在调用时,python 还没有值aor item(解释我的索引超出范围错误)对我来说是有意义的,因为我希望通过enumerate(tmp)...为它们分配值...逐行键入相同的代码可以工作,自然,因为 enumerate 可以对它进行分配,a并且item一旦它被调用...

但我不完全明白为什么类似的东西lens = [len(item) for item in tmp]会起作用,但这不会。变量分配似乎以相同的顺序发生,不是吗?我之前经历过,Python 不太擅长处理返回多个值/对象的函数……也许它会是 3.9 的更新?谁知道!

干杯! (:

4

2 回答 2

0

我相信这是答案:

lens = [len(tmp[a][0]) for a, item in enumerate(tmp)]

或者,您可以这样做:

lens = [len(item[0]) for a, item in enumerate(tmp)]

在您的代码中, a 是索引,而 item 是每个单独的列表项。

于 2020-11-16T04:59:21.887 回答
0

Karl Knechtel 的回答将我指向 python-lists basics 解决了这个问题。

我们可以使用嵌套循环:

lens = [len(row) for item in tmp for row in item]
于 2020-11-16T05:01:50.217 回答