我有一份 list ,如下:

s=['eb736d0020000000073a...002300001f', '00bd860020000020efad...002300003f', '1452770020000040ef53...002300005f', 'fbeadb002000006006ac...002300007f', 'ec38b600200000801441...002300009f', '07251600200000a004a2...00230000bf', '12866c00200000c0ee2c...00230000df', 'f5cf2600200000e0f10d...00220000ff', '0a331500230000ffeefe...002200011f', '0e0ddc002300011f0cd0...002200013f', 'edd254002300013f0edc...002200015f', 'fbe547002300015ff0b7...002200017f', '14506f002300017ff37c...002200019f', 'f8a2a0002300019f112f...00220001bf', ...]

一个元素的大小是可变的,但模数为16个字符. 对于列表中的每个元素,我希望:将前8个字符与后8个字符互换,每16个字符:

s[0] = 'aaaaaaaabbbbbbbb'
s = s[0][8:16] + s[0][0:16]
s[0] = 'bbbbbbbbaaaaaaaa'

所以对于一个元素是可以的,但是如何在没有for循环的情况下为列表中的每个元素每16个字符重现一个元素呢?

s[0] = 'aaaaaaaabbbbbbbbccccccccdddddddd' <= 2048 characters
s[1] = 'eeeeeeeeffffffffgggggggghhhhhhhh' <= 2048 characters
to
s[0] = 'bbbbbbbbaaaaaaaaddddddddcccccccc'
s[1] = 'ffffffffeeeeeeeehhhhhhhhgggggggg'

我使用for循环,我发现它对于 Big Data 来说很慢. 我不想使用循环,而是使用更有效的方法

推荐答案

循环总是需要的,但您可以try 使用列表理解+str.join来加快速度:

lst = ["aaaaaaaabbbbbbbbccccccccdddddddd", "eeeeeeeeffffffffgggggggghhhhhhhh"]

out = [
    "".join(f"{(part:=s[i : i + 16])[8:16]}{part[0:8]}" for i in range(0, len(s), 16))
    for s in lst
]
print(out)

打印:

[
  'bbbbbbbbaaaaaaaaddddddddcccccccc', 
  'ffffffffeeeeeeeehhhhhhhhgggggggg'
]

Python相关问答推荐

在pandas DataFrame上运行apply()时如何访问DateTime索引?

两极:滚动组,起始指数由不同列设置

使用Python从HTTP打印值

单击cookie按钮,但结果不一致

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

使用Beautiful Soup获取第二个srcset属性

拆分pandas列并创建包含这些拆分值计数的新列

使用LineConnection动画1D数据

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

如何在箱形图中添加绘制线的传奇?

使用索引列表列表对列进行切片并获取行方向的向量长度

通过Selenium从页面获取所有H2元素

从dict的列中分钟

加速Python循环

Julia CSV for Python中的等效性Pandas index_col参数

如何使用它?

Pandas Loc Select 到NaN和值列表

使用groupby方法移除公共子字符串

在Python中使用if else或使用regex将二进制数据如111转换为001""

Gekko中基于时间的间隔约束