gpt4 book ai didi

python - 拆分每个第 n 个字符串元素并合并到数组中的最佳方法?

转载 作者:太空狗 更新时间:2023-10-30 00:32:08 25 4
gpt4 key购买 nike

抱歉,标题含糊不清,但很难简明扼要地解释。

基本上,假设我有一个如下所示的列表(在 Python 中):

['a', 'b', 'c\nd', 'e', 'f\ng', 'h', 'i']

由此,我想得到这个:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

我想到的一种方法是像这样使用 reduce:

reduce(lambda x, y: x + y.split('\n'), lst, [])

但我认为这不是很有效,因为它没有利用我们知道每个第 n 个元素中都有分隔符这一事实。有什么建议吗?

编辑:有关数组构造方式的更多背景信息,这可能是问题所在。

我的文本格式为:

Ignorable line
Field name 1|Field name 2|Field name 3|Field name 4
Value 1|Value 2|Value 3|Value 4
Value 1|Value 2|Value 3|Value 4
...

我们可以有任意数量的字段名,并且总是有与在线字段名相同数量的值。请注意,我们可以在值中换行。我们只知道 will 由“|”分隔。所以我们可以

Value 1|This is an long
value that extends over multiple
lines|Value 3|Value 4

我目前的做法是执行 s.split('\n', 2) 以便我们在它们自己的字符串中获取字段名称,并在它们自己的字符串中获取值。然后,当按“|”拆分值时,我们得到了我最初提到的形式的列表。

最佳答案

您只需执行 ('\n'.join(lst)).split() 即可获得第二个列表。

In [17]:

%timeit reduce(lambda x, y: x + y.split('\n'), lst, [])
100000 loops, best of 3: 9.64 µs per loop
In [18]:

%timeit ('\n'.join(lst)).split()
1000000 loops, best of 3: 1.09 µs per loop

感谢@Joran Beasley 建议使用 split() 而不是 split('\n')!

编辑

现在我看到你更新的问题,我认为我们可以避免在开始时陷入这种情况,请参阅(使用re):

In [71]:

L=re.findall('([^|]+)\|',
''.join(['|'+item+'|' if item.count('|')==3 else item for item in S.split('\n')[1:]])+'|')
In [72]:

zip(*[L[i::4] for i in range(4)]) #4 being the number of fields.
Out[72]:
[('Field name 1', 'Field name 2', 'Field name 3', 'Field name 4'),
('Value 1', 'Value 2', 'Value 3', 'Value 4'),
('Value 1',
'This is an longvalue that extends over multiplelines',
'Value 3',
'Value 4')]

最初看起来像是 SAS 的数据集,对吗?

关于python - 拆分每个第 n 个字符串元素并合并到数组中的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888894/

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