Замена позиции списка оператором if
Можем ли мы выполнить замену в списке Python?
У меня есть этот список, который импортируется из CSV-файла:
[['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ', "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0 ',' 0 '], ['2',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ','1',' 0 ',' 0 ',' 0 ','1',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ', "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0 ',' 0 ',' 0 ',' 1 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ','1',' 0 ', "0", "0", "0"], ["3", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ',' 0 ', "1", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0', '0', '0', '0', '0']]
Первый индекс (выделенный жирным шрифтом) из вышеприведенного списка станет идентификатором покупателя, за которым следует элемент, который они покупают, из списка выше мы можем увидеть купленный покупателем 1 элемент в столбце 12, отмеченный курсивом.
Желание поставлено:
покупатель 1 приобрел предмет 12 и предмет 22, и поэтому для покупателя 2 и 3
Обратите внимание, что я пробовал использовать panda и не работал, и я не уверен, как использовать оператор if внутри цикла for.
Кроме того, я использовал rappid minner, и они заменяли столбец за столбцом, и они включали [0][0] для замены. Есть ли другое решение, кроме Python?
Вот мой код:
import csv
csvfile = open("tran.csv", 'r')
reader = csv.reader(csvfile, delimiter=',')
my_list = list(reader)
a = len(my_list[1])
b = (my_list)
x=0
y=0
for name in my_list:
print ("costummer", my_list[0][0], "buy", my_list[n][g])
Обновление для CSV Writer:
csvdict = {words[0]:words[1:] for words in csv}
for x in csvdict.keys(): # iterate over the keys '1', '2', ....
products = [index+1 for index,v in enumerate(csvdict[x]) if v == '1' ] # create list of purchases where the '1's are indexed
f = open("trans.csv", 'w')
result = ("costummer", x, "buy", products)
resultstr = (','.join([str(x) for x in hasil]))#I try to convert it to str.
print (resultstr) #to check whether the conversion from list into str is working or not.
f.write(resultstr) #try to write to csv file
1 ответ
Вот "отправная точка", для клиента 1 будет дополнительный индекс, с которым вы можете поиграть. Это может быть не важно. Вы можете добавить условие if, чтобы позаботиться об этом.
csv = [['1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], ['2', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0'], ['3', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0']]
csvdict = {words[0]:words[1:] for words in csv}
for x in sorted(csvdict.keys()): # iterate over the keys '1', '2', ....
products = [index+1 for index,v in enumerate(csvdict[x]) if v == '1' ] # create list of purchases where the '1's are indexed
print "costummer", x, "purchased", ' '.join(['"item '+str(i)+'"' for i in B])