2015-11-24 1 views
1

Я пытаюсь узнать больше о функциях Python, переведя R-код, отмечая различные подходы. В R-конкатенации есть правило утилизации, если строки кратно друг другу, оценщик будет перерабатывать меньший объект, чтобы он соответствовал длине большего. Вот пример:Операции по переработке в Python, аналогичные R-векторизации

lttrs <- c("A", "B", "C") 
lbl <- "pct" 
users <- c(1,2) 

Если бы я хотел, чтобы объединить эти три объекта, чтобы получить "Apct1" "Bpct1" "Cpct1" "Apct2" "Bpct2" "Cpct2". Я могу повторить последний объект users в два раза длиннее первой и R будет выяснить все остальное:

user_indx <- rep(users, each=length(lttrs)) 
paste0(lttrs, lbl, user_indx) 
#[1] "Apct1" "Bpct1" "Cpct1" "Apct2" "Bpct2" "Cpct2" 

я смог перевести rep(users, each=length(lttrs)) вызов:

import numpy as np 
lttrs = ['A', 'B', 'C'] 
lbl = ['pct'] 
users = [1,2] 
print np.repeat(users, len(lttrs)) 
[1 1 1 2 2 2] 

Я изо всех сил двигаться дальше оттуда.

ответ

2

Похоже, что вы хотите itertools.product, что дает произведение итераций.

from itertools import product 
lttrs = ['A', 'B', 'C'] 
lbl = ['pct'] 
users = [1,2] 
combine = [] 
for p in product(lttrs, lbl, map(str, users)): 
    combine.append(''.join(p)) 
+0

бы вы должны использовать 'join', чтобы получить окончательный вывод' [ "Apct1" "Bpct1" "Cpct1" "Apct2" "Bpct2" "Cpct2"] '? –

+0

@PierreLafortune Да, или вы можете вручную объединить. Обратите внимание, что любой список, который не содержит строк, должен быть преобразован (здесь я использовал 'map') – qwr

+0

Спасибо. Он по-прежнему дает результат с 'print', а не' list'. Если я сохраняю этот вывод для использования в дальнейших операциях, как я могу сохранить вывод в новую переменную? –

Смежные вопросы