Python:根据子列表的不同,对列表中列表的元素进行不同的切片

Python:根据子列表的不同,对列表中列表的元素进行不同的切片,python,diff,python-2.7,Python,Diff,Python 2.7,我对这个问题的了解已经到了极限。目前,我正在解析diff结果。下面是我试图操纵的结果的一个例子: [ [[0, 0, '\xe2\x80\x9cWe are returning again statement. He depicted the attacks as part of a battle launched by Sunnis against the country\xe2\x80\x99s Shia leaders.\r\n\r\nThe first attack came about

我对这个问题的了解已经到了极限。目前,我正在解析diff结果。下面是我试图操纵的结果的一个例子:

[
[[0, 0, '\xe2\x80\x9cWe are returning again statement. He depicted the attacks as part of a battle launched by Sunnis against the country\xe2\x80\x99s Shia leaders.\r\n\r\nThe first attack came about 5 a.m. on Monday when gunmen stormed onto an Iraqi '], 
[-1, 1, 'military base near the town of Duluiyah in S'], 
[0, 2, 'alahuddin Province and killed 15 Iraqi soldiers, according to security officials. Four soldiers, including a high-ranking was taken prisoner by the insurgents, who escaped with him.\r\n\r\nThe insurgents also attacked the home of a police official in Balad, seriously wounding ']], 

[[0, 4, 'eckpoint near Baquba, killing one policeman. In all, attacks were reported in at least five provinces.\r\n\r\nEight attacks were launched in Kirkuk Province, mostly targeting police patrols, with five people killed and 42 wounded.\r\n\r\nThe offensive started on the third day of the Islamic holy month of Ramadan, and '],
[-1, 5, 'apparently took advantage of the wi'], 
[1, 6, 'll and the other.']]
]
我正在建造一个差异汇总器。下面是它的分解方式:

该列表是一个差异结果列表(在上面的示例中有两个)

子列表有三个元素:

  • 更改前的文本
  • 构成变更的文本;及
  • 更改后的文本
子列表也有三个元素:

  • 一个数字,用于指示该节是删除、添加还是未受影响(-1,0,1)
  • 位置编号(顺序);及
  • 绳子本身
我需要做的是分割子列表中的字符串,但这取决于它们在哪个子列表中

  • 对于子列表中的元素1,我需要切掉除最后4个字符以外的所有字符串
  • 对于子列表中的元素2,我需要没有切片
  • 对于子列表中的元素3,我需要切掉除前4个字符以外的所有字符串
下面是一个例子,说明为什么我需要用这种方式切片。解决方案之前的简化文本:

[[[...]], [[this is a],[sentence],[to demonstrate.]], [[...]]]
[[[...]], [[is a],[sentence],[to d]], [[...]]]
解决方案后的文本:

[[[...]], [[this is a],[sentence],[to demonstrate.]], [[...]]]
[[[...]], [[is a],[sentence],[to d]], [[...]]]
另一个困难是,我想保留列表的结构

这是一个艰难的一天-我为这个问题的精神扭曲的性质道歉,但这就是溢出的原因


想法?

您可以通过一个大的拆包任务来实现这一点:

[[[b_n, b_p, b_s[-4:]], change, [a_n, a_p, a_s[:4]]]
 for (b_n, b_p, b_s), change, (a_n, a_p, a_s) in results]
另一种方法是使用
zip
并应用
slice
对象:

[[[num, position, text[op]]
  for (num, position, text), op in zip(chunk, [slice(-4, None), slice(None), slice(4)])]
 for chunk in results]

如果没有语法错误,则无法使这些代码段正常工作。有关于实施的建议吗?很好。让它工作,并尝试各种边缘案件。工作得很漂亮。谢谢