交换列表中每个单词的字符组

问题描述 投票:0回答:1

我有一个类似的清单:

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 个字符为模。 对于列表中的每个元素,我想:每 16 个字符交换前 8 个字符与后 8 个字符:

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 循环,我发现它对于大数据来说很慢。 我不想使用循环而是使用更有效的东西

python string list swap modulo
1个回答
0
投票

循环总是需要的,但你可以尝试使用列表理解+

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'
]
© www.soinside.com 2019 - 2024. All rights reserved.