Перечислите два списка одновременно - PullRequest
1 голос
/ 30 марта 2020

У меня есть два списка: 1. Список символов IPA - M 2. Список отдельных слов - N

Теперь мне нужно создать третий список X = [N, M], где для каждого символа IPA найденный в одном слове, я должен присвоить 1 новому списку и 0. Например, если M = ['ɓ', 'u', 'l', 'i', 'r', 't', 'ə' , 'w', 'a', 'b'] и для простоты N имеет только два слова = ['ɓuli', 'rutə'], тогда результат должен выглядеть как X = [[1,1,1,1, 0,0,0,0,0,0], [0,1,0,0,1,1,1,0,0,0]]

Так что это своего рода матрица ко-вхождения, но проще - потому что мне не нужно держать счетчик того, сколько раз символ встречается в слове. Мне просто нужно присвоить 1 X, когда символ встречается в слове в правильном положении. Может быть, я обдумываю это, но я не могу найти способ держать индекс обоих списков. Вот мой фрагмент кода:

M = ['ɓ', 'u', 'l', 'i', 'r', 't', 'ə', 'w', 'a', 'b'] 
N = ['ɓuli', 'rutə']
X = np.zeros((len(N), len(M)))

for n_idx in range(len(N)):
    print('Current word index', n_idx)
    for symbol in N[n_idx]:
        if symbol in M:
            print(symbol, 'found, at word index', n_idx, ', and symbol index')
            # if found then ad to X at proper position

#Expected result
X = [[1,1,1,1,0,0,0,0,0,0], 
     [0,1,0,0,1,1,1,0,0,0]]

Ответы [ 3 ]

1 голос
/ 30 марта 2020

Вы можете построить такой индекс с помощью этой строки:

X = [[1 if e in s else 0 for e in M] for s in N]

, представляющей собой двойной список понимания, состоящий из букв и слов. Однако вам следует использовать библиотеки, такие как sklearn, для более эффективного выполнения таких операций (например, https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html)

1 голос
/ 30 марта 2020

Вы можете сделать это так. Просто l oop слова, которые нужно проверить с другим списком и сравнить.

M=['a','e','i','o','u']
N=['stack','overflow']
output=[]
for words in N:
    words_output=[]
    for v in M:
        o = 1 if v in words else 0
        words_output.append(o)
    output.append(words_output)

output:
[[1, 0, 0, 0, 0], [0, 1, 0, 1, 0]]
0 голосов
/ 30 марта 2020

Попробуйте это

M = ['ɓ', 'u', 'l', 'i', 'r', 't', 'ə', 'w', 'a', 'b'] 
N = ['ɓuli', 'rutə']
result = []
for n in N:
    tmp = []
    characters = list(n)
    for m in M:
        tmp.append(1 if m in characters else 0)
    result.append(tmp)
print(result)
#[[1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
# [0, 1, 0, 0, 1, 1, 1, 0, 0, 0]]
...