想象一下,我有以下列表:
>>> mylist
[('a', u'DT'),
('Satisfactory', u'JJ'),
('tracing', u'VBG'),
('with', u'IN'),
('a', u'DT'),
('fairly', u'RB'),
('persistent', u'JJ'),
('with', u'IN')]
如何连接属于包含u'IN'
或u'DT'
的元素之间的列表项,并仅返回连接元素,即:
[('Satisfactory tracing'),
('fairly persistent')]
答案 0 :(得分:1)
这是一个可以给你想要的结果。也许你需要对它进行一些优化。
my_list = ([('a', u'DT'),
('Satisfactory', u'JJ'),
('tracing', u'VBG'),
('with', u'IN'),
('a', u'DT'),
('fairly', u'RB'),
('persistent', u'JJ'),
('with', u'IN')])
sequence_enable = False
new_list = []
for i in my_list:
if i[1] == 'DT' or i[1] == 'IN':
if not sequence_enable: # Start reading values
sequence_enable = True
temp_str = []
else: # stop reading values
new_list.append(' '.join(temp_str))
sequence_enable = False
continue
else: # store values
if sequence_enable:
temp_str.append(i[0])
print(new_list)
# output: ['Satisfactory tracing', 'fairly persistent']
答案 1 :(得分:1)
这是一个解决方案:
idt = [item for item in range(len(mylist)) if mylist[item][1] == u'DT']
jdt = [item for item in range(len(mylist)) if mylist[item][1] == u'IN']
ij = zip(idt,jdt)
temp_list = [mylist[i[0]+1:i[1]] for i in ij]
new_list = [str(elem[0][0]+ ' ' + elem[1][0]) for elem in temp_list]
首先在u'DT'
中找到u'IN'
和mylist
的索引,然后将它们一起拉到一个元组列表ij
中。每个元组是程序应该从中提取值的间隔的开始和结束。这些值首先在mylist
中显示为temp_list
时提取。最后一步形成目标new_list
,该目标temp_list
加入并处理存储在( )
中的提取值。
此解决方案不会在括号new_list
中为您提供值 - 似乎要实现此目的,('Satisfactory tracing',)
的元素必须转换为元组,即'(Satisfactory tracing)'
或括号必须是字符串DT
的一部分。
编辑 - IN
和new_list
之间任意数量字符串的解决方案 - 直到new_list
相同的所有内容,temp_list
是通过从每个元素中提取第一个元素来形成的new_list = [((' ').join(map(lambda x: x[0], sub_el))) for sub_el in temp_list]
的子列表并将它们连接成一个字符串
mylist = [('a', u'DT'), ('Satisfactory', u'JJ'), ('Satisfactory', u'JJ'),
('tracing', u'VBG'),('with', u'IN'),('a', u'DT'),('fairly', u'RB'),
('persistent', u'JJ'),('with', u'IN'), ('a', u'DT'),('persistent', u'JJ'),
('with', u'IN')]
使用
进行测试['Satisfactory Satisfactory tracing', 'fairly persistent', 'persistent']
产量
{{1}}
答案 2 :(得分:0)
这里有一些伪代码和真实代码:
while elements remain in mylist:
# Find the next "DT" element
look at next element
while element[1] is not "DT":
look at next element
# Watch for "IN"; concatenate elements in the meantime.
result = []
look at next element
while element[1] is not "IN":
result.append(element[0])
# result is a list of the words you want
result_conc = ' '.join(result)
这会让你感动吗?