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

Python 如何将列表数组转换为字符串集合,并将字符串乘以数字(提供的示例),python,string,list,repeat,Python,String,List,Repeat,我得到了以下列表数组 [数组(['I','1','am','1','a','1','boy','3'])数组(['I','1','am','a','girl','1'])数组(['I','1','am','1','non-binary','2']) 我想编写一个python代码,将数组转换为语料库,其中文本乘以数字,即以下格式: corpus=[“我是男孩”、“我是女孩”、“我不是二进制的非二进制的” 我如何在Python上实现这一点?非常感谢您的帮助。请尝试以下方法: my_list = [

我得到了以下列表数组

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

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

corpus=[“我是男孩”、“我是女孩”、“我不是二进制的非二进制的”

我如何在Python上实现这一点?非常感谢您的帮助。

请尝试以下方法:

my_list = [
    ['I', '1', 'am', '1', 'a', '1', 'boy', '3'],
    ['I', '1', 'am', '1', 'a', '1', 'girl', '1'],
    ['I', '1', 'am', '1', 'non-binary', '2']
 ]
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):#函数:将列表转换为重复单词的str
重复=[''.join([lst[i]]*int(lst[i+1])表示范围(0,len(lst),2)内的i)
返回“”。加入(重复)
输出=[stringify(x)for x in data]#为每个项应用函数
打印(输出)#[‘我是男孩’、‘我是女孩’、‘我是非二进制非二进制’]

这一个基本上是重复应用列表理解和
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']]
语料库=[[word]*int(句子[pos+1])表示pos数据中的句子,如果pos%2==0,则表示枚举(句子)中的单词
语料库=[语料库中的逐字逐句]
印刷品(语料库)
“”“输出
[‘我’、‘是’、‘a’、‘男孩’、‘男孩’、‘我’、‘是’、‘a’、‘女孩’、‘我’、‘是’、‘非二进制’、‘非二进制’]
"""

通过
zip的一个选项:

l = [['I', '1', 'am', '1', 'a', '1', 'boy', '3'], ['I', '1', 'am', '1', 'a', '1', 'girl', '1'], ['I', '1', 'am', '1', 'non-binary', '2']]
result = [' '.join((' '.join([x] * int(y))) for x,y in zip(i[::2], i[1::2])) for i in l]
输出

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

您的数据存在一些问题:

  • 未定义数组
  • 结尾有一个
    ,但结尾没有
  • 外部列表中的元素之间没有任何逗号
  • 在中间的列表中,“am”或“a”之后没有数字
  • 从风格的角度来看,列表之间应该有回车符
  • 综上所述,我有以下几点:

    my_list = [
        ['I', '1', 'am', '1', 'a', '1', 'boy', '3'],
        ['I', '1', 'am', '1', 'a', '1', 'girl', '1'],
        ['I', '1', 'am', '1', 'non-binary', '2']
     ]
    
    给定此输入,以下代码将起作用:

    [
        " ".join([" ".join([word]*int(count)) 
                  for word, count in zip(sublist[::2],sublist[1::2])])
        for sublist in my_list
    ]
    

    你运行了你的代码吗?@accumulation添加了初始列表
    l
    你可以运行,如果我遗漏了什么,请告诉我。这个解决方案适合我。非常感谢你的回复。