如何将列表数组转换为字符串集合,并将字符串乘以数字(提供的示例)

2024-05-19 03:39:38 发布

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

我得到了以下列表数组

[array(['I', '1', 'am', '1', 'a', '1', 'boy', '3']) array(['I', '1', 'am', 'a', 'girl', '1']) array(['I', '1', 'am', '1', 'non-binary', '2'])

我想编写一个python代码,将数组转换为语料库,其中文本乘以数字,即以下格式:

corpus = [ "I am a boy boy boy", "I am a girl", "I am non-binary non-binary]

如何在Python上实现这一点?任何帮助都将不胜感激


Tags: 代码文本列表格式数字corpus数组am
3条回答

请尝试以下操作:

data = [['I', '1', 'am', '1', 'a', '1', 'boy', '3'], ['I', '1', 'am', '1', 'a', '1', 'girl', '1'], ['I', '1', 'am', '1', 'non-binary', '2']]

def stringify(lst): # function: convert list into str with the words repeated
    repeated = [' '.join([lst[i]] * int(lst[i + 1])) for i in range(0, len(lst), 2)]
    return ' '.join(repeated)

output = [stringify(x) for x in data] # apply the function for each item
print(output) # ['I am a boy boy boy', 'I am a girl', 'I am non-binary non-binary']

这一个基本上是重复应用列表理解和join方法

这是我想到的

def corpus(list):
    s = []
    for x in range(len(list)):
        if not list[x].isdigit():
            if (x != len(list)-1) and (list[x+1].isdigit()):
                for num in range(int(list[x+1])):
                    s.append(list[x])
            else:
                s.append(list[x])
    return ' '.join(s)

这应该检查列表的每个索引后是否有一个数字,并返回索引乘以数字的结果,数字中有必要的空格。对不起,如果它很笨重,我试着快点做。如果您需要任何if/else声明的澄清,请告诉我

编辑:我在这上面花了一些额外的时间,这样代码就不会那么笨重了。我们使用“”join()在每个条目之间添加空格,而不是每次向字符串中添加空格并调整最后的添加。 将其应用于您提供的列表

a = [['I', '1', 'am', '1', 'a', '1', 'boy', '3'],
     ['I', '1', 'am', 'a', 'girl', '1'],
     ['I', '1', 'am', '1', 'non-binary', '2']]

print(list(map(corpus,a)))

['I am a boy boy boy', 'I am a girl', 'I am non-binary non-binary']

您可以使用列表理解来获取所有单词,然后使用另一个列表理解来“展平”列表

data = [['I', '1', 'am', '1', 'a', '1', 'boy', '3'], 
        ['I', '1', 'am', '1', 'a', '1', 'girl', '1'], 
        ['I', '1', 'am', '1', 'non-binary', '2']]

corpus = [[word]*int(sentence[pos+1]) for sentence in data for pos, word in enumerate(sentence) if pos % 2 == 0]

corpus = [word for words in corpus for word in words]

print(corpus)

""" OUTPUT
['I', 'am', 'a', 'boy', 'boy', 'boy', 'I', 'am', 'a', 'girl', 'I', 'am', 'non-binary', 'non-binary']
"""

相关问题 更多 >

    热门问题