2015-11-09 6 views
0

Таким образом, я получил несколько списков, такие как:Loops с несколькими условиями в питоне

transaction = ['BUY', 'SELL', ...] 
company = ['Acer', 'Cemex', ...] 
value = [[0.5344, 2.23423], [5.43534, 4.3342543], ...] 

Псевдокода, что я хочу, как:

for iteration in transaction: 
    count = 0 
    if iteration == 'BUY': 
     for each different company in the list company: 
      execute an equation to add to an accumulator 
      count += 1 
    if iteration == 'SELL': 
     for each different company in the list company: 
      execute an equation to subtract from an accumulator 
      count += 1 

Может кто-нибудь объяснить мне, какой метод я бы использовать для достижения результата, который я бы хотел. Я думал, что цикл for с несколькими утверждениями if под ним, но он не работает.

+2

У вас уже есть много. Просто выньте лишние псевдокодовые слова (т. Е. «Для каждого в компании:« вместо «для каждой отдельной компании в списке компании»), и все, что вам осталось реализовать, - это уравнение. – TigerhawkT3

+0

Вы также можете упростить, имея только один вложенный цикл 'for' и помещая' '' '' '' '' '' '' там как 'if' /' elif'. –

+0

Я забыл добавить довольно важное условие. Сожалею. Таким образом, каждый индекс списка соответствует друг другу. Поэтому 'company [0]' должен соответствовать 'transaction [0]' и т. Д. Я обновил свой псевдокод. Можете ли вы сказать мне, если моя логика на правильном пути? Благодарю. – jparikh97

ответ

0

Я не совсем уверен, что результат вы хотели бы, но на основе на ваши комментарии по этому вопросу, кажется, вы можете запрограммировать все списки сразу. Вы можете использовать для этого zip.

transactions = ['BUY', 'SELL'] 
companies = ['Acer', 'Cemex'] 
values = [[0.5344, 2.23423], [5.43534, 4.3342543]] 
for trans, company, (val1, val2) in zip(transactions, companies, values): 
    if trans == 'BUY': 
     print("Bought {}: {}, {}".format(company, val1, val2)) 
    elif trans == 'SELL': 
     print("Sold {}: {}, {}".format(company, val1, val2)) 
0

Как уже упоминалось, рассмотрите возможность использования Pandas, мощного анализа данных Python, в котором вы даже можете импортировать свои списки в dataframe или импортировать из таблицы csv или sql.

(. Я добавить больше точек данных в ваш образец для демонстрации Обратите внимание на счетчик Acer и Cemex по сделке):

import pandas as pd 

transaction = ['BUY','SELL', 'BUY', 'BUY', 'BUY', 'SELL'] 
company = ['Acer', 'Cemex', 'Acer', 'Apple', 'Cemex', 'GE'] 
value = [[0.5344, 2.23423], [5.43534, 4.3342543], 
     [5.4387874, 4.3342543], [2.9313534, 4.3342543], 
     [4.431224, 4.3342543], [6.4778734, 4.3342543]] 

# DEFINE DATA FRAME 
df = pd.DataFrame({'transaction':transaction, 
        'company':company, 
        'value1':[value[0][0],value[1][0],value[2][0], 
          value[3][0],value[4][0],value[5][0]], 
        'value2':[value[0][1],value[1][1],value[2][1], 
          value[3][1],value[4][1],value[5][1]]}) 

print(df) 

# company transaction value1 value2 
# 0 Acer   BUY 0.534400 2.234230 
# 1 Cemex  SELL 5.435340 4.334254 
# 2 Acer   BUY 5.438787 4.334254 
# 3 Apple   BUY 2.931353 4.334254 
# 4 Cemex   BUY 4.431224 4.334254 
# 5  GE  SELL 6.477873 4.334254 

print(df.groupby(['company', 'transaction']).count()) 

#      value1 value2 
# company transaction     
# Acer BUY    2  2 
# Apple BUY    1  1 
# Cemex BUY    1  1 
#   SELL    1  1 
# GE  SELL    1  1 
Смежные вопросы