如何将列表转换为列表的多个子列表?

时间:2019-06-03 09:35:57

标签: python json python-3.x text-processing python-textprocessing

我有一个项目列表,我想在同一列表中创建子列表。

我的列表看起来像这样。

echo "$dirname" | sed -e 's/\.json$/_json/'
lst=['(a) subp1;\n', '(A) subp1;\n', '(1) subp1;\n', '(2) subp1;\n', '(b) subp1;\n', '(i) subpb; and\n', '(ii) subpb; and\n', '(iii) subpb; and\n', '(c) subp3.\n']

if (ij) comes in pair never comes alone like(i) or (j) always (ij) and it is lower

(i) is roman

我想要类似的东西

lst1=[]
for item in lst:
      lst1.append(item)

我的预期输出

if item[1].islower() till next item[1].islower i need as one sublist

1 个答案:

答案 0 :(得分:0)

由于您还需要计算罗马数字,因此我会避免使用.islower()

一种解决方案是创建一个有效分隔符的列表,当遇到分隔符时,将一个子列表追加到列表中,并将项目追加到最后一个子列表:

import string

lst=['(a) subp1;\n', '(A) subp1;\n', '(1) subp1;\n', '(2) subp1;\n', '(b) subp1;\n', '(i) subpb; and\n', '(ii) subpb; and\n', '(iii) subpb; and\n', '(c) subp3.\n']

# all ascii lowercase letter, replacing 'i' with 'ij'
separators = [letter if letter != "i" else "ij" for letter in string.ascii_lowercase]

lst1=[]
for item in lst:
    if item[1] in separators:
        lst1.append([])
    lst1[-1].append(item)

print(lst1)

输出:

  

[['(a) subp1;\n', '(A) subp1;\n', '(1) subp1;\n', '(2) subp1;\n'], ['(b) subp1;\n', '(i) subpb; and\n', '(ii) subpb; and\n', '(iii) subpb; and\n'], ['(c) subp3.\n']]

如果要使用所有罗马数字,则需要考虑所有这些数字:
i, v, x, l, c, d, m

只需在separators中将代表罗马数字的字母替换为相关的占位符