Найти - Пользователи
Полная версия: Простой вопрос(заклинило, не могу понять проблему)
Начало » Python для новичков » Простой вопрос(заклинило, не могу понять проблему)
1 2 3 4 5 6
Dimazzzzzz
Нужно создать массив из того, что получается в переменной типа list - Typ1. Я создаю его вводя новую переменную Mtyp1, вот так(постарался сделать минимальный пример):
    
import numpy as np
Typ1 = []       
    Typ1.append((1 if ty1 == 1 or ty2 == 1 or ty3 == 1 or ty4 == 1 or ty5 == 1 else 0))
Mtyp1 = np.array(Typ1)
Подскажите как это сделать немного красивее, без новой переменной Mtyp1. Не хочется программу кучей лишних переменных захламлять.
Пробовал сделать вот так:
 np.array(Typ1.append((1 if ty1 == 1 or ty2 == 1 or ty3 == 1 or ty4 == 1 or ty5 == 1 else 0)))
Но ничего не вышло) переменная Typ 1 так и осталось в виде list, а не array

Заранее спасибо
Ed
np.array([int(1 in (ty1, ty2, ty3, ty4, ty5))])
Dimazzzzzz
Ed
np.array([int(1 in (ty1, ty2, ty3, ty4, ty5))])
Спасибо за более элегантную запись условия тоже спасибо Но она дает массив n-размерный, а мне нужно одно размерный)))
Upd: поторопился, проблема не решена
Dimazzzzzz
Блин нет, есть проблема все-таки Ваш код добавляет только последний элемент, т.к. я не знаю как к строчке:
Typ1 = np.array([int(1 in (ty1, ty2, ty3, ty4, ty5))])
Вернуть append. Поскольку моя программа добавляет в список Typ1 множество элементов.
Например она может быть вот такой:
>>> Typ1
[0, 1, 1, 1, 0, 1, 0, 0]
А если я вас правильно понял и верно внес в прогу, то в массив преобразовывается только последний элемент
P.S. Прям чувствую, что решение очевидно, но жутко туплю…
Ed
Трудно что-либо сказать глядя на то, что вы пишете. Я же не знаю откуда вы берете эти переменные. Код покажите?
Ed
Ладно, допустим, что ваши переменные формируются из некоего двумерного списка. Тогда то, что вы хотите будет выглядеть вот так:
lfoo = [(1,2,3,4,5), (3,4,5,0,3) ...]
Typ1 = np.array([int(1 in (ty1, ty2, ty3, ty4, ty5)) for ty1, ty2, ty3, ty4, ty5 in lfoo])
Dimazzzzzz
Простите, счас напишу подробнее как получается эта переменная:
Я построчно парсю html код, выцепляю из множества страниц информацию. Страницы чередуются вот так:
for J in xrange(803311460, 803311500):
    url='http://www.vezetmne.ru/auctions/'+str(J)
конкретно переменные ty1, ty2 и т.д. получаются вот так:
       if 'Участ' in type1:
            ty1 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type1:
            ty1 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type1:
            ty1 = 3 #'Логины зашифрованы'(+) 
       #и т.д. до 10
       # ty2,3,4 задаются абсолютно аналогично
      
Потом я хочу задать переменную, которая бы при значении либо t1=1 либо t2=1…. выдавала значение 1, если ни одна из переменных не равна 1 - тогда 0. Ну и аналогично таких переменных 10 штук, у меня они называются Typ1. Понятно, что при каждом проходе по странице(t1,2,3,4,5) меняются. Вот я и сделал так, чтобы они заносились в список, с помощью append. А потом уже преобразую в массив Mtyp1, как я писал выше. Можно ли сразу в Typ1 сделать массив, не создавая переменную Mtyp1?
P.S. Мне кажется, что ваш метод правилен для стабильной переменной, а у меня эта переменная с каждым проходом меняется.
Ed
Показывайте весь код. Если у вас там 10 переменных, то что-то в консерватории не так.
Dimazzzzzz
Ух, весь код ужас как страшно показывать, руки кривые )) плеваться будете жутко))))
#-*- coding: cp1251 -*-
"""
"""#/usr/bin/python
import urllib
import numpy as np
rasnost = []
Blitz1 = []
Stavka2 = []
Igrok2 = []
Typ1 = []
Typ2 = []
Typ3 = []
Typ4 = []
Typ5 = []
Typ6 = []
Typ7 = []
Typ8 = []
Typ9 = []
Typ10 = []
for J in xrange(803311460, 803311500):
 url='http://www.vezetmne.ru/auctions/'+str(J)
 urllib.urlretrieve(url=url, filename='COD.html')
 infile = open('COD.html')
 lines = infile.readlines()
 print J
 for i in range(len(lines)):
    line = lines[i]# так короче
    if 'cbid=alterStep' in line:
       rasnost.append(np.float(line.strip()[24:28]))
    if 'item_bigcell' in line:
        type1 = lines[i+1].strip()[10:40]
        type2 = lines[i+2].strip()[10:40]
        type3 = lines[i+3].strip()[10:40]
        type4 = lines[i+4].strip()[10:40]
        type5 = lines[i+5].strip()[10:40]
    if 'Блиц-цена' in line:
        Origin = line.strip()[91:97]
        if '.' in Origin:
            Orig = Origin[0:5]
        else:
            Orig = Origin
        if '.' in Orig:
            AA = Orig[0:4]
        else:
            AA = Orig
        if '.' in AA:
            BB = AA[0:3]
        else:
            BB = AA
        if '.' in BB:
            Blitz1.append(np.int(BB[0:2]))
        else:
            Blitz1.append(np.int(BB))
    if '<div class="history" id="history">' in line:
       Stavka1 = lines[i+3].strip()[21:50]# stavka.append(line.strip()[21:30])
       Stavka2.append(np.float(Stavka1[0:Stavka1.find('р')]))
       Igrok1 = lines[i+3].strip()[21:-24]  # А вот для ника возьмем с минусом
       Igrok2.append(Igrok1[Stavka1.find('р')+26:])
       if 'Участ' in type1:
           ty1 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type1:
           ty1 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type1:
           ty1 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type1:
           ty1 = 4 #'Дневной'(+)
       elif 'Один' in type1:
           ty1 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type1:
           ty1 = 6 #' Для новичков' (+)
       elif 'Ставк' in type1:
           ty1 = 7 #'На понижение'
       elif 'Фикс' in type1:
           ty1 = 8 #'Фиксированная цена'
       elif '100' in type1:
           ty1 = 9 #'100% скидка'
       elif 'Бесп' in type1:
           ty1 = 10 #'Бесплатные ставки'
       else:
           ty1 = 0
           
       if 'Участ' in type2:
           ty2 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type2:
           ty2 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type2:
           ty2 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type2:
           ty2 = 4 #'Дневной'(+)
       elif 'Один' in type2:
           ty2 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type2:
           ty2 = 6 #' Для новичков' (+)
       elif 'Ставк' in type2:
           ty2 = 7 #'На понижение'
       elif 'Фикс' in type2:
           ty2 = 8 #'Фиксированная цена'
       elif '100' in type2:
           ty2 = 9 #'100% скидка'
       elif 'Бесп' in type2:
           ty2 = 10 #'Бесплатные ставки'
       else:
           ty2 = 0
           
       if 'Участ' in type3:
           ty3 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type3:
           ty3 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type3:
           ty3 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type3:
           ty3 = 4 #'Дневной'(+)
       elif 'Один' in type3:
           ty3 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type3:
           ty3 = 6 #' Для новичков' (+)
       elif 'Ставк' in type3:
           ty3 = 7 #'На понижение'
       elif 'Фикс' in type3:
           ty3 = 8 #'Фиксированная цена'
       elif '100' in type3:
           ty3 = 9 #'100% скидка'
       elif 'Бесп' in type3:
           ty3 = 10 #'Бесплатные ставки'
       else:
           ty3 = 0
           
       if 'Участ' in type4:
           ty4 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type4:
           ty4 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type4:
           ty4 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type4:
           ty4 = 4 #'Дневной'(+)
       elif 'Один' in type4:
           ty4 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type4:
           ty4 = 6 #' Для новичков' (+)
       elif 'Ставк' in type4:
           ty4 = 7 #'На понижение'
       elif 'Фикс' in type4:
           ty4 = 8 #'Фиксированная цена'
       elif '100' in type4:
           ty4 = 9 #'100% скидка'
       elif 'Бесп' in type4:
           ty4 = 10 #'Бесплатные ставки'
       else:
           ty4 = 0
           
       if 'Участ' in type5:
           ty5 = 1 # Не требует свободных лотов (+)
       elif 'Кажд' in type5:
           ty5 = 2 # Ограниченное количество ставок (+)
       elif 'Лог' in type5:
           ty5 = 3 #'Логины зашифрованы'(+)
       elif 'Днев' in type5:
           ty5 = 4 #'Дневной'(+)
       elif 'Один' in type5:
           ty5 = 5 #'С блефом' (+) - Внезапно ОО
       elif 'Аукцион для' in type5:
           ty5 = 6 #' Для новичков' (+)
       elif 'Ставк' in type5:
           ty5 = 7 #'На понижение'
       elif 'Фикс' in type5:
           ty5 = 8 #'Фиксированная цена'
       elif '100' in type5:
           ty5 = 9 #'100% скидка'
       elif 'Бесп' in type5:
           ty5 = 10 #'Бесплатные ставки'
       else:
           ty5 = 0
       Typ1.append((1 if ty1 == 1 or ty2 == 1 or ty3 == 1 or ty4 == 1 or ty5 == 1 else 0))
       Typ2.append((1 if ty1 == 2 or ty2 == 2 or ty3 == 2 or ty4 == 2 or ty5 == 2 else 0))
       Typ3.append((1 if ty1 == 3 or ty2 == 3 or ty3 == 3 or ty4 == 3 or ty5 == 3 else 0))
       Typ4.append((1 if ty1 == 4 or ty2 == 4 or ty3 == 4 or ty4 == 4 or ty5 == 4 else 0))
       Typ5.append((1 if ty1 == 5 or ty2 == 5 or ty3 == 5 or ty4 == 5 or ty5 == 5 else 0))
       Typ6.append((1 if ty1 == 6 or ty2 == 6 or ty3 == 6 or ty4 == 6 or ty5 == 6 else 0))
       Typ7.append((1 if ty1 == 7 or ty2 == 7 or ty3 == 7 or ty4 == 7 or ty5 == 7 else 0))
       Typ8.append((1 if ty1 == 8 or ty2 == 8 or ty3 == 8 or ty4 == 8 or ty5 == 8 else 0))
       Typ9.append((1 if ty1 == 9 or ty2 == 9 or ty3 == 9 or ty4 == 9 or ty5 == 9 else 0))
       Typ10.append((1 if ty1 == 10 or ty2 == 10 or ty3 == 10 or ty4 == 10 or ty5 == 10 else 0))
print rasnost, '\n', Blitz1, '\n', Stavka2, '\n', Igrok2
W = np.array(rasnost)
Blitz = np.array(Blitz1) 
Stavka = np.array(Stavka2)
Mtyp1 = np.array(Typ1)
Mtyp1 = np.array(Typ1)
Mtyp2 = np.array(Typ2)
Mtyp3 = np.array(Typ3)
Mtyp4 = np.array(Typ4)
Mtyp5 = np.array(Typ5)
Mtyp6 = np.array(Typ6)
Mtyp7 = np.array(Typ7)
Mtyp8 = np.array(Typ8)
Mtyp9 = np.array(Typ9)
Mtyp10 = np.array(Typ10)
P.S. Я сам засмеялся на него глянув, но как есть (
Ed
Ну, код конечно серьезный. Давайте пооптимизируем, может чего получше сделаем. Для начала давайте избавимся от 10 списков Typ1 - Typ10. Вместо этого попользуем один двумерный, вот такой:
Typs = [[]] * 10

И добавлять в него нужно так:
Typs[0].append(...

Справитесь?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB