python - 如果满足特定条件,则将字符串与列表列表连接
问题描述
我有这个列表列表:
x = [["hello", 1, "pacific", 'M','F','W'], ["yes", 4, 5, "turn", 'S', 'F', 'Su']]
我想加入列表中的特定项目:'M','F','W','S','Su'
因此,如果列表中存在这些项目中的任何一项,则应将它们连接在一起,从而导致:
x = [["hello", 1, "pacific", 'M,F,W'], ["yes", 4, 5, "turn", 'S,F,Su']]
我当前的尝试如下所示:
x = [["hello", 1, "pacific", 'M','F','W'], ["yes", 4, 5, "turn", 'S', 'F', 'Su']]
z = []
for item in x:
for y in item:
if y == 'M' or y == 'F' or y =='W' or y == 'S' or y =='Su':
item.index(y)
z.append((item.index(y)))
else:
pass
x[min(z):max(z)+1] = [','.join(item[min(z):max(z)+1])]
print(x)
我想我可以在列表中获取我想要的特定字符串的位置,然后使用 min 和 max 加入它们。
我的代码返回:
[['hello', 1, 'pacific', 'M', 'F', 'W'], ['yes', 4, 5, 'turn', 'S', 'F', 'Su'], 'turn,S,F']
很感谢任何形式的帮助!
解决方案
试试这个线性列表理解:
[[i for i in sublist if i not in l] + [','.join([i for i in sublist if i in l])] for sublist in x]
输出:
[['hello', 1, 'drugs', 'M,F,W'], ['yes', 4, 5, 'turn', 'S,F,Su']]
完整代码:
x = [["hello", 1, "drugs", 'M','F','W'], ["yes", 4, 5, "turn", 'S', 'F', 'Su']]
l = ['M', 'F', 'W', 'S', 'Su']
print([[i for i in sublist if i not in l] + [','.join([i for i in sublist if i in l])] for sublist in x])
这只是遍历列表,并在每个子列表中提取不在l
列表中的所有字符串,并添加一个值作为最后一个元素,该元素是一个字符串,子列表中的字符串也在列表中,l
并用逗号连接和分隔.
编辑:
由于知道特定项目不会总是在最后,您可以尝试使用itertools.takewhile
and itertools.dropwhile
。
我稍微修改了您的列表(移动特定项目的位置),以证明我的代码有效:
from itertools import takewhile, dropwhile
x = [["hello", 1, 'M','F','W', "drugs"], ["yes", 4, 5, 'S', 'F', 'Su', "turn"]]
l = ['M', 'F', 'W', 'S', 'Su']
newlist = []
for sublist in x:
b = list(takewhile(lambda x: x not in l, sublist))
newlist.append(b + [','.join([i for i in sublist if i in l])] + list(dropwhile(lambda x: x in l, sublist[len(b):])))
print(newlist)
输出:
[['hello', 1, 'M,F,W', 'drugs'], ['yes', 4, 5, 'S,F,Su', 'turn']]
它按预期工作。
推荐阅读
- java - 在 Java 应用程序中禁用 jaspersoft 日志记录
- c - 此 C 代码中是否存在内存泄漏?
- powershell - Google Cloud SDK Powershell - 命令在文本编辑器中打开脚本文件
- css - CSS3 形状还是 SVG?
- sql-server - 如何在文档的最深层次结构中对所有 xml 节点值求和,在 sql server 中使用 xpath 到 xml 列,而不使用节点名称?
- xamarin - 升级到 Xamarin.Android 9.0.0.18 出现错误:没有找到适合 TypefaceSpan 的构造函数
- ubuntu - 如何配置 mosquitto 的 Ubuntu snap 版本?
- c - 如何编写一个可以找到n个数的除法和减法的C程序?
- python - 将 numpy 解决方案转换为 dask(numpy 索引在 dask 中不起作用)
- go - Golang OpenAPI 3.0 oneOf 构造