首页 > 解决方案 > 从 Python 中的字符列表创建句子(R 代码翻译)

问题描述

我有一个清单如下

mylist = ['f', 'i', 'r', 's', 't', ' ', 'r', 'a', 'y', ' ', '>', ' ', 's', 'a', 'n', 'k', 'r', 'i', 't', ' ', '>', ' ', 'f', 'e', 'm', 'a', 'l', 'e', ' ', '>', ' ', ' ', '=', ' ', 'a', 'a', 'd', 'h', 'y', 'a', '\n', 'u', 'n', 'i', 'q', 'u', 'e', ' ', '>', ' ', 's', 'a', 'n', 'k', 'r', 'i', 't', ' ', '>', ' ', 'm', 'a', 'l', 'e', ' ', '>', ' ', ' ', '=', ' ', 'a', 'd', 'h', 'v', 'a', 'i', 't', 'h']

我有一个基于列表生成的序列:

sequence = np.arange(0, len(mylist) - 11, 3) 

它产生

[0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66]

我的输出是一个二维列表

loop on the sequence

    dimension1= mylist[sequence:sequence+11]
    dimension2 = mylist[sequence+12]

最终输出列表应如下所示:

dimension1                                              dimension2
"f" "i" "r" "s" "t" " " "r" "a" "y" " " ">" " "         "s"
"s" "t" " " "r" "a" "y" " " ">" " " "s" "a" "n"         "s"
"r" "a" "y" " " ">" " " "s" "a" "n" "s" "k" "r"         "i"
`

我想在不编写 for 循环的情况下生成它。我可以在 R 中做到这一点,如下所示

mylist = list (c('f', 'i', 'r', 's', 't', ' ', 'r', 'a', 'y', ' ', '>', ' ', 's', 'a', 'n', 'k', 'r', 'i', 't', ' ', '>', ' ', 'f', 'e', 'm', 'a', 'l', 'e', ' ', '>', ' ', ' ', '=', ' ', 'a', 'a', 'd', 'h', 'y', 'a', '\n', 'u', 'n', 'i', 'q', 'u', 'e', ' ', '>', ' ', 's', 'a', 'n', 'k', 'r', 'i', 't', ' ', '>', ' ', 'm', 'a', 'l', 'e', ' ', '>', ' ', ' ', '=', ' ', 'a', 'd', 'h', 'v', 'a', 'i', 't', 'h'))

mylist = unlist(mylist)
dataset <- map(
  seq(1, length(mylist) - 12-1, by = 3), 
  ~list(sentece = mylist[.x:(.x + 11)], next_char = mylist[.x + 12])
) 

dataset <- transpose(dataset)

有人可以帮我将上面的 R 代码翻译成 Python

标签: pythonr

解决方案


我们可以初始化一个字典并将值附加到它

import pandas as pd
maxlen = 12
dictN = {'dimension1':[], 'dimension2':[]}
mlenN = maxlen  - 1

for i in range(0, len(mylist) - mlenN, 3):
    dictN['dimension1'].append(mylist[i:(i+mlenN)])
    dictN['dimension2'].append(mylist[i + maxlen-1])

pd.DataFrame(dictN)

或者正如评论中提到的@Parfait,它可以写成字典理解

maxlen = 12
mlenN = maxlen - 1
dictN = [{'dimension1':mylist[i:(i+mlenN)], \
          'dimension2':mylist[i + maxlen-1]} \
         for i in range(0, len(mylist) - mlenN, 3)]

推荐阅读