python - 字符串上的多个分割

标签 python string split

我有一个以下形式的字符串:

s = "1,2;3,4"

我必须获得:

res = [(1,2),(3,4)]

我想不出比以下更好的了:

pairs = [pair.split(",") for pair in s.split(";")]
res = [(int(a), int(b)) for a,b in pairs]

事实上这不起作用:

>>> res = [(int(a),int(b)) for pair in s.split(";") for a,b in pair.split(",")]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <listcomp>
ValueError: not enough values to unpack (expected 2, got 1)

我的问题是:

  1. 有单行解决方案吗?实现这一目标最Pythonic的方法是什么?
  2. 为什么我的后一个代码不起作用?

最佳答案

试试这个:

>>> [tuple(int(x) for x in i.split(',')) for i in s.split(';')]
[(1, 2), (3, 4)]

或者拆包:

>>> [(*(int(x) for x in i.split(',')),) for i in s.split(';')]
[(1, 2), (3, 4)]
>>> 

或者:

>>> [tuple(map(int, i.split(','))) for i in s.split(';')]
[(1, 2), (3, 4)] 

您可以尝试使用 tuple(map(...)) 进行列表理解或嵌套列表理解。

您的代码不起作用的原因是您在通过两个迭代器解压列表时尝试迭代包含两个项目的列表。为此不需要迭代。要修复您的代码,请尝试:

res = [(int(pair.split(',')[0]), int(pair.split(',')[1])) for pair in s.split(";")]
print(res)

输出:

[(1, 2), (3, 4)] 

或者:

[(int(a), int(b)) for a, b in [pair.split(",") for pair in s.split(";")]]

关于python - 字符串上的多个分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69141258/

相关文章:

Python Apache Beam 多重输出和处理

python - 绑定(bind)到 NumPy 数组的变量的独立性

javascript - 使用 .html() 时,jQuery 会从字符串中去除一些 html 元素吗?

Java JSTL 拆分函数正则表达式

python - pandas groupby 基于唯一值扩展 df

java - C# 和 Java 中从字符串获取字节数组的区别

ios - 如何在 Swift 中使用 (?) 和 (!)

java - 不使用 split 功能分离成列

java - Java中分割字符串

python - py2neo.database.status.Neo4j 3.0.3 未经授权