Python:将100个单词(10个字符)的列表转置

2024-10-02 10:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个100个单词的列表,每个单词正好有10个字符。我想换位(如果你愿意的话)列出10个单词,每个单词有100个字符。这些词没有任何意义,但我正在寻找这样一个功能。我可以使用2个循环,但我想知道是否有一个更简单的方法,如MATLAB的转置。你知道吗

下面是一个MATLAB示例:

>> words =
    'KWDSEHQGUI'
    'RSNKYDVCME'
    'MBUSWHEZRI'
    'CVNHWGOQUL'
    'RNTCQWHJKA'

>> wordsT = words'

    'KRMCR'
    'WSBVN'
    'DNUNT'
    'SKSHC'
    'EYWWQ'
    'HDHGW'
    'QVEOH'
    'GCZQJ'
    'UMRUK'
    'IEILA'

已解决(感谢下面的多个答案)

trans = list(zip(*words))
#To join all the tuples to a string
tWords = []
for items in trans:
    tWords.append(''.join(items))

Tags: 方法功能示例列表transitems单词意义
3条回答

您可以使用join在单个循环中完成。示例代码示例(这里w\u list是您的源代码列表):

transpose_list = []
for i in range(10): 
   transpose_list.append(''.join(w_list[i:i+10]))
print(transpose_list)

上面的代码是根据具体情况,我们要加入10个单词的列表和列表包含100个单词。您可以根据需要进行修改,但主要用途是join。你知道吗

对@wwii的评论稍加修改:

trans = list(''.join(w) for w in zip(*words))

正如@wwii在评论中所建议的,trans = list(zip(*words))非常接近,但是得到的是元组而不是字符串。你知道吗

这样做有效:

words = [
    'KWDSEHQGUI',
    'RSNKYDVCME',
    'MBUSWHEZRI',
    'CVNHWGOQUL',
    'RNTCQWHJKA']

trans = list(map(lambda x: ''.join(x),zip(*words)))

print(trans)

我发现我更喜欢@yabishek的答案,但不知道哪种解决方案会更快。你知道吗

from timeit import timeit
from random import randint

size = 100
data = []
for _ in range(size):
    data.append(''.join([chr(65+randint(0, 25)) for _ in range(size)]))


def test_map():
    return list(map(lambda x: ''.join(x), zip(*data)))


def test_comprehension():
    return list(''.join(w) for w in zip(*data))


print('map:', timeit(lambda: test_map(), number=10000))
print('comprehension:', timeit(lambda: test_comprehension(), number=10000))

结果:

map: 1.54815
comprehension: 1.5759290999999997

所以,通常情况下,map比理解快,但不会快很多。如果你只做了几次,我会同意他们的回答,如果你需要做很多,或者大量的数据,我会同意我的。你知道吗

相关问题 更多 >

    热门问题