gpt4 book ai didi

python - 在 Python 中使用生成器/"with ... as"的紧凑方式

转载 作者:行者123 更新时间:2023-11-28 20:34:05 28 4
gpt4 key购买 nike

我有以下数据结构:

var = [['x_A_B', 1], ['x_A_C', 1], ['x_B_A', 1], ['x_B_D', 1], ['x_C_A', 1], ['x_C_D', 1], ['x_D_B', 1], ['x_D_C', 1]]

我想将这些值提取为

var2 = [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'D'), ('C', 'A'), ('C', 'D'), ('D', 'B'), ('D', 'C')]

目前我使用以下行

var2 = [(item[0].split("_")[1], item[0].split("_")[2]) for item in var]

但是写起来很繁琐,同样的split还要计算两次。有没有一种紧凑的方式来写这个,也许用关键字 with ... as,像这样?

# not working
var2 = [(u, v) with item[0].split("_") as _, u, v for item in var]

编辑:我一直在寻找一个更通用的解决方案,我可以在其中使用具有任意长度子字符串的拆分字符串的任意索引,我只是使用了一个不正确的示例。查看我接受的解决方案。

最佳答案

一般情况是:

[tuple(item[0].split('_')[1:3]) for item in var]

最一般的情况是:

indices = {1,2}
[tuple([x for i, x in enumerate(item[0].split('_')) if i in indices]) for item in var]

但是,如果您有两个相邻的索引,这就太多了。

关于python - 在 Python 中使用生成器/"with ... as"的紧凑方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49362449/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com