Как преобразовать список в несколько подсписков списка? - PullRequest
0 голосов
/ 03 июня 2019

У меня есть список элементов, я хочу сделать списки в том же списке.

мой список выглядит примерно так ..

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

мой ожидаемый результат

[['(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']]

1 Ответ

0 голосов
/ 03 июня 2019

Поскольку у вас также есть римские цифры, я буду избегать .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 буквы, обозначающие римские цифры, на соответствующие заполнители

...