如何在列表理解中为函数调用赋值

2024-10-06 07:05:59 发布

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

我正在尝试优化一些代码来处理列表列表,我注意到,当我试图在列表中指定一个列表时,我总是在语法或输出方面遇到错误。在

我的代码在下面

out = []
for cluster in ClusterFile:
    cluster = list(cluster)
    for term in cluster[3]:
        for item in Interest:
            if term == item[0]:
                x = [item[1]]
                cluster.append(x)
                break
        out.append(cluster)
        break

我的许多尝试之一:

^{pr2}$

输入示例:

cluster = [['a'], [1, 2], [3, 4], [['w'], ['x'], ['y'], ['z']], [5, 6]]

Interest = [['w', 'qx12'], ['y', 'qx19']]

输出示例:

[['a'], [1, 2], [3, 4], [['w'], ['x'], ['y'], ['z']], [5, 6], ['qx12', 'qx19']]

有人知道有什么资源可以帮我解决这个问题吗?我用python3编写代码


Tags: 代码in示例列表for语法outitem
1条回答
网友
1楼 · 发布于 2024-10-06 07:05:59

虽然我同意@blacksite的观点,即列表理解并不是最具可读性的方法,但如果这是您的目标,请看以下方法:

cluster.append(
    [x[0] for x in [[item[1] for item in Interest if term[0] == item[0]] 
                    for cluster in ClusterFile for term in cluster[2]] 
     if len(x)]
)

cluster
# [['a'], [1, 2], [['w'], ['x'], ['y'], ['z']], [5, 6], ['qx12', 'qx19']]

数据:

^{pr2}$

一些注意事项:

  • 嵌套列表理解的工作顺序与嵌套for循环的顺序相同。如果你有:

    for a in b:
        for x in a:
            f(x)
    

    那么这看起来像:

    [f(x) for a in b for x in a]
    

    这看起来有点倒退,因为x in a远离使用x的语句前面。把它想象成嵌套for循环的顺序。(您在原始代码中已将其向后放置。)

  • 你想要cluster[2],而不是{}。

  • 当选择cluster[2]中的单个元素时,例如['w']['x']等,您是在比较由term表示的列表元素(['w'])与该列表('w')中包含的由item[0]表示的字符串。这不匹配,您需要term[0]。在
  • 最后一个被附加的列表(即x[0]s的列表)会删除一些在内部列表理解中创建的空列表。这不太好,也许有更好的方法。但是,在我看来,如果没有列表理解,整个方法将更具可读性。在

相关问题 更多 >