我有两个清单。第一个列表是代表句子的单词列表:
x = ['i', 'can', 'tell', 'you', 'about', 'the', 'keynote.', 'help', 'you', 'browse', 'sessions.', 'or', 'recommend', 'specific', 'office', 'hours', 'and', 'app', 'reviews.', 'which', 'would', 'you', 'like?']
第二个列表的长度与第一个列表相同,并且由数字(0、1、2、3或4)组成:
y = ['0', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '3', '0', '0']
我需要针对第一列表中的标点符号将第一列表和第二列表分开。它看起来像:
x1 = ['i', 'can', 'tell', 'you', 'about', 'the', 'keynote.']
y1 = ['0', '2', '2', '0', '0', '0', '0']
x2 = ['help', 'you', 'browse', 'sessions.']
y2 = ['0', '0', '0', '0']
x3 = ['or', 'recommend', 'specific', 'office', 'hours', 'and', 'app', 'reviews.']
y3 = ['1', '1', '1', '0', '0', '0', '0', '0']
x4 = ['which', 'would', 'you', 'like?']
x5 = ['0', '3', '0', '0']
从这些列表中,我需要创建两个列表。在新的第一个列表中,元素将是句子,而在第二个新列表中,元素将是数字。如果具有数字的列表具有除0以外的任何数字,则将其放入第二个新列表中的数字,否则置于零。它看起来像:
x_new = ["i can tell you about the keynote.", "help you browse sessions.", "or recommend specific office hours and app reviews.", "which would you like?"]
y_new = [2, 0, 1, 3]
注意:如果带有数字(例如 y1 )的列表具有多个不同的数字(例如 ['0','2','2','1',' 1','1','0'] ,然后采用具有更多并发性的数字(在此示例中为'1')。如果数字的并发性相同( ['0','2','2','1','1','0','0'] )取列表中的第一个非零数字(在此示例中为'2')。
这是我的代码:
x = ['i', 'can', 'tell', 'you', 'about', 'the', 'keynote.', 'help', 'you', 'browse', 'sessions.', 'or', 'recommend', 'specific', 'office', 'hours', 'and', 'app', 'reviews.', 'which', 'would', 'you', 'like?']
y = ['0', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '3', '0', '0']
x_new = []
y_new = []
i = 0
k = 0
punctuation_marks = ('.', '?', '!')
# searching punctuation marks
while i < len(x):
for k in range(i, len(x)):
# if a punctuation mark has found
if x[k].endswith(punctuation_marks):
# create list's element for a sentence
x_new += x[i:k]
# cheaking for promises before the punctuation mark
for l in range(i, k):
if y[l] == '1':
y_new += '1'
break
else:
y += '0'
break
break
i = k
但是它进入了无限循环,我无法弄清楚它出了什么问题。另外,我不知道如何计算脚本中数字并发的数量(请参见上面的注释)。我的代码只是在数字列表中找到第一个元素。
答案 0 :(得分:0)
如果您检查起点,那么您的代码将更加高效。
尝试此代码。
x = ['i', 'can', 'tell', 'you', 'about', 'the', 'keynote.', 'help', 'you', 'browse', 'sessions.', 'or', 'recommend', 'specific', 'office', 'hours', 'and', 'app', 'reviews.', 'which', 'would', 'you', 'like?']
y = ['0', '2', '2', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '3', '0', '0']
x_new = []
y_new = []
punctuation_marks = ('.', '?', '!')
s = 0
for i in range(len(x)):
if x[i].endswith(punctuation_marks):
x_new.append(' '.join(x[s:i+1]))
y_new.append(max(list(map(int, y[s:i+1]))))
s = i + 1