как разрезать строку на отдельные символы во вложенном списке - PullRequest
1 голос
/ 30 сентября 2019

Не могли бы вы поделиться некоторыми знаниями? Как я могу нарезать строку для отдельных символов во вложенном списке? Ниже приведены некоторые примеры ...

str1 = 'man'
str2 = ['man']
str3 = ['man oh man']

x1=[str1[i:i+1] for i in range(0, len(str1), n)]
x2=[str2[i:i+1] for i in range(0, len(str2), n)]
x3=[str3[i:i+1] for i in range(0, len(str3), n)]

print(x1)
print(x2)
print(x3)
#actual output

>>>
['m', 'a', 'n']
[['man']]
[['man oh man']]
>>>

#expected output

>>>
['m', 'a', 'n']
[['m', 'a', 'n']]
[['m', 'a', 'n'],['o', 'h'],['m', 'a', 'n']]
>>>

Ответы [ 4 ]

2 голосов
/ 30 сентября 2019

Вы можете просто построить список из строк с помощью конструктора list, чтобы разбить их на отдельные символы. Для приведенных выше примеров:

str2 = ['man']
str3 = ['man oh man']

[list(i) for i in str2]
# [['m', 'a', 'n']]

[list(i) for s in str3 for i in s.split()]
# [['m', 'a', 'n'], ['o', 'h'], ['m', 'a', 'n']]
0 голосов
/ 30 сентября 2019

Вам нужно будет

  1. Проверить, является ли вход уже списком или нет
  2. Если это список, разделите каждую строку в списке на пробелы перед дальнейшим разделением на символы

Попробуйте:

def split_list_string(l):

  if not isinstance(l, list):
    return list(l)
  else:
    return [[y for y in x.split()] for x in l]


print(split_list_string(str1))
print(split_list_string(str2))
print(split_list_string(str3))

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

0 голосов
/ 30 сентября 2019

Вот еще один вариант, который меняет ваш код меньше всего. Пришлось определить n=1, чтобы можно было применить ваш код:

n = 1
str1 = 'man'
str2 = ['man']
str3 = ['man oh man']
str3 = str3[0].split()
x2 = []

x1=[str1[i:i+1] for i in range(0, len(str1), n)]
x2.append([str2[0][i:i+1] for i in range(0, len(str2[0]), n)])
x3=[ list(k[0]) for k in [str3[i:i+1] for i in range(0, len(str3), n)]]

print(x1)
print(x2)
print(x3)

Вывод:

['m', 'a', 'n']
[['m', 'a', 'n']]
[['m', 'a', 'n'], ['o', 'h'], ['m', 'a', 'n']]
0 голосов
/ 30 сентября 2019

для списка вы можете сделать это

[[j for j in i] for i in str2[0].split()]
[[j for j in i] for i in str3[0].split()]

для строки вы можете сделать это

[i for i in str1]
...