Glo*_*oom 5 python list-comprehension python-3.x
我正在尝试优化一些代码来处理列表列表,我注意到当我尝试在列表中指定一个列表时,我会一直遇到语法或输出错误.
我的代码如下
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
Run Code Online (Sandbox Code Playgroud)
我的许多尝试之一:
out = [([item[1]]) for item in Interest for term in cluster[3] if term ==item[0] for cluster in ClusterFile]
Run Code Online (Sandbox Code Playgroud)
输入示例:
cluster = [['a'], [1, 2], [3, 4], [['w'], ['x'], ['y'], ['z']], [5, 6]]
Interest = [['w', 'qx12'], ['y', 'qx19']]
Run Code Online (Sandbox Code Playgroud)
示例输出:
[['a'], [1, 2], [3, 4], [['w'], ['x'], ['y'], ['z']], [5, 6], ['qx12', 'qx19']]
Run Code Online (Sandbox Code Playgroud)
有谁知道任何可以帮助我解决这个问题的资源?我在Python 3中编码
虽然我同意 @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']]
Run Code Online (Sandbox Code Playgroud)
数据:
cluster = [['a'], [1, 2], [['w'], ['x'], ['y'], ['z']], [5, 6]]
ClusterFile = [cluster]
Interest = [['w', 'qx12'], ['y', 'qx19']]
Run Code Online (Sandbox Code Playgroud)
一些注意事项:
嵌套列表推导式的工作顺序与嵌套 for 循环相同。所以如果你有:
for a in b:
for x in a:
f(x)
Run Code Online (Sandbox Code Playgroud)
那么这看起来像:
[f(x) for a in b for x in a]
Run Code Online (Sandbox Code Playgroud)
这看起来有点倒退,因为离使用x in a语句的前面很远。x只需将其想象为嵌套 for 循环的顺序即可。(你在原始代码中把它倒过来了。)
你想要cluster[2],没有cluster[3]。
cluster[2]当选择等中的单个元素时,您将用表示的列表元素 ( ) 与该列表 ( ) 中包含的['w']由表示的字符串进行比较。那不匹配,你需要代替。 ['x']['w']term'w'item[0]term[0]x[0])会删除一些在内部列表理解中创建的空列表。这不是很漂亮,可能有更好的方法来做到这一点。但同样,在我看来,如果没有列表理解,整个方法会更具可读性。| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |