[python]simple stuff
2. regexp?
если в итоге нужно именно строку, то
def MakeLookGood(SomeString):
return '('+''.join([i+',' for i in SomeString.split])[:-1]+')'
не слишком красиво, но работает
def MakeLookGood(SomeString):ну ты и жесть написал. Почему не:
return '('+''.join([i+',' for i in SomeString.split])[:-1]+')'
def MakeLookGood(SomeString):
return '(' + ','.join(SomeString.split + ')'
2) избавить строку от пробелов:
''.join(s.split
А чтобы сделать только то, что ты написал в примере (строка в нестроковый sequence): просто s.split+преобразование в требуемый sequence, если не устраивает list. Правда, там будут строки, а не инты. Чтобы были еще и инты, то что-то вроде:
[int(i) for i in s.split]
Ты, сцуко, разлюбил форматные строки, что ли?
Чо пристал?
так слишком понятно
так слишком понятногыг, ну, если цель была показать, как можно непонятно писать на питоне - то да. Ведь там же жуткое количество ненужных телодвижений и неиспользованных возможностей
[int(i) for i in s.split] а это вообще какая-то злая магия ) Где-нибудь можно прочитать про такие фишки?
Спасибо. Я почему-то думал, что split должен иметь аргумент обязательно.Да пожалуйста! Читай документацию повнимательнее просто
Да пожалуйста! Читай документацию повнимательнее простоя это читаю:
http://rgruet.free.fr/PQR2.3.html#stringMethods
а там не был описан эффект от split
Типа:
http://www.python.org/doc/2.3.5/lib/lib.html
подставь нужную версию
ЗЫ А что 2.3? Требования проекта?
Ну, например:
x = 1 или 2 или 3
что нужно писать, вместо
if x==1:
smth1
if x==2:
smth2
и т.п.
?
версия 2.5
а где в документации объясняется существование и устройство следующего объекта:
[int(i) for i in s.split]
?
http://docs.python.org/tut/node7.html#SECTION007140000000000...
http://docs.python.org/ref/lists.html
там поиск есть (на главной странице документации текущей версии (2.5)- http://docs.python.org/ )
http://docs.python.org/ref/lists.html
там поиск есть (на главной странице документации текущей версии (2.5)- http://docs.python.org/ )
if x==1:Зависит от сложности smth* и количества веток, например, если веток больше 3, а smth* это методы, замыкания или лямбды, то так, например:
smth1
if x==2:
smth2
actions = {
1: smth1,
2: smth2,
...
}
...
actions[actionID]
Но это скорее вопрос 'кому как больше нравится' и скорости (dict частенько будет быстрее if-elif-...-else)
if data[0]=='501':
print( 'Door_stop_link_1-1.6 ,1,1, '+data[2] )
print( 'Door_stop_link_1-1.6 ,2,2, '+data[3] )
print( 'Door_stop_link_1-1.6 ,3,3, '+data[4] )
if data[0]=='502':
print( 'Door_stop_link_2-1.1 ,1,1, '+data[2] )
print( 'Door_stop_link_2-1.1 ,2,2, '+data[3] )
print( 'Door_stop_link_2-1.1 ,3,3, '+data[4] )
........
Если веток мало, то оставил бы if-elif-else
tmp=line.lstrip.split(' ')[0]
if tmp.isdigit and int(tmp)>500 and int(tmp)<535:
data=line.split
if data[0]=='501':
print( 'Door_stop_link_1-1.6 ,1,1, '+data[2] )
print( 'Door_stop_link_1-1.6 ,2,2, '+data[3] )
print( 'Door_stop_link_1-1.6 ,3,3, '+data[4] )
if data[0]=='502':
print( 'Door_stop_link_2-1.1 ,1,1, '+data[2] )
print( 'Door_stop_link_2-1.1 ,2,2, '+data[3] )
print( 'Door_stop_link_2-1.1 ,3,3, '+data[4] )
if data[0]=='503':
print( 'Door_stop_link_3-1.4 ,1,1, '+data[2] )
print( 'Door_stop_link_3-1.4 ,2,2, '+data[3] )
print( 'Door_stop_link_3-1.4 ,3,3, '+data[4] )
if data[0]=='504':
print( 'Uplock_support_links-2.1 ,1,1, '+data[2] )
print( 'Uplock_support_links-2.1 ,2,2, '+data[3] )
print( 'Uplock_support_links-2.1 ,3,3, '+data[4] )
if data[0]=='505':
print( 'Uplock_support_links-1.1 ,1,1, '+data[2] )
print( 'Uplock_support_links-1.1 ,2,2, '+data[3] )
print( 'Uplock_support_links-1.1 ,3,3, '+data[4] )
if data[0]=='506':
print( 'Assembly.16 ,1,1, '+data[2] )
# print( 'Assembly.16 ,2,2, '+data[3] )
print( 'Assembly.16 ,3,3, '+data[4] )
if data[0]=='507':
print( 'Assembly.17 ,1,1, '+data[2] )
print( 'Assembly.17 ,2,2, '+data[3] )
print( 'Assembly.17 ,3,3, '+data[4] )
if data[0]=='531':
print( 'Assembly.10002 ,1,1, '+data[2] )
print( 'Assembly.10002 ,2,2, '+data[3] )
print( 'Assembly.10002 ,3,3, '+data[4] )
if data[0]=='532':
print( 'Assembly.10001 ,1,1, '+data[2] )
print( 'Assembly.10001 ,2,2, '+data[3] )
print( 'Assembly.10001 ,3,3, '+data[4] )
if data[0]=='533':
print( 'Assembly.10003 ,1,1, '+data[2] )
print( 'Assembly.10003 ,2,2, '+data[3] )
print( 'Assembly.10003 ,3,3, '+data[4] )
if data[0]=='534':
print( 'Assembly.5 ,1,1, '+data[2] )
print( 'Assembly.5 ,2,2, '+data[3] )
print( 'Assembly.5 ,3,3, '+data[4] )
def gogogo(data):
def printStupidError:
print( 'Door_stop_link_1-1.6 ,1,1, %s'%data[2] )
print( 'Door_stop_link_1-1.6 ,2,2, %s'%data[3] )
print( 'Door_stop_link_1-1.6 ,3,3, %s'%data[4] )
def printCrazyBoobsError:
print( 'Door_stop_link_2-1.1 ,1,1, %s'%data[2] )
print( 'Door_stop_link_2-1.1 ,2,2, %s'%data[3] )
print( 'Door_stop_link_2-1.1 ,3,3, %s'%data[4] )
...
errPrinters = {
'501': printStupidError,
'502': printCrazyBoobsError,
}
...
errPrinters[data[0]]
но вообще, если пример дословный:
stupidError = """
Door_stop_link_1-1.6 ,1,1, %s
Door_stop_link_1-1.6 ,2,2, %s
Door_stop_link_1-1.6 ,3,3, %s"""
crazyBoobsError = """
Door_stop_link_2-1.1 ,1,1, %s
Door_stop_link_2-1.1 ,2,2, %s
Door_stop_link_2-1.1 ,3,3, %s"""
...
def gogogo(data):
errMessages = {
'501': stupidError,
'502': crazyBoobsError,
}
...
print errMessages[data[0]]%tuple(data[2:5])
А совсем в идеале импортил бы эти строки из отдельного модуля или грузил из ресурса.
Только раз у тебя там комментарий затесался в теле 506, то использовал бы именованные параметры:
"""something %(where)s
something %(what)s""" % {'where':data[2], 'what':data[3],...}
tmp2=[]
for item in tmp:
try:
if fabs(float(item>50:
tmp2.append(float(item
else:
tmp2.append(0)
except:
tmp2.append(item)
Поясни сначала, пожалуйста, как(ое)ие исключени(е)я ты ловишь. Вообще, не слишком хорошо использовать отлов 'всех' исключений в местах, где подразумеваются одно-два и логика отличная от отчета об ошибках/перезапуска модуля. Хотя бы потому, что читабельность понижается. Вот я сейчас, к примеру, ломаю голову, почему ты в список кладешь либо нуль, либо float(item а поймав исключение, пользуешься просто item, хотя исключения тут либо по памяти, либо от преобразования в float. И строю кучу предположений вместо конструктива...
остальное, по идее, понятно
tmp2=map(lambda x: (float(x) if (fabs(float(x > 50) else 0) if type(x) in (int, float) else x, tmp)
нате вам ещё кусок гавнокода =)
гавнокода кусоквоистину! на первом же не_числе словит эксепшн.
сфигабы?
ладна, эксепшена не будет, т.к. float никогда не вызовется ни для одной str
о, клёво
оно работает не так, как твой кусок кода
и вообще, это был пример как писать не стоит
if fabs(float(item>50:
tmp2.append(float(item
else:
tmp2.append(0)
заменил бы на:
fItem = float(item)
tmp2.append(fItem if fabs(fItem)>50 else 0)
а остальное не трогал.
Просто это же в каждом проходе (наверняка ниже есть еще одна обработка нового списка, иначе нафиг преобразовывать в float?) по списку придется делать ветвление/ловить эксепшены из-за неоднородности
вообще удивительно что нет {float,int,etc}(string, default)
вообще удивительно что нет {float,int,etc}(string, default)Мб есть какие-то заморочки. Интересно, PEP был похожий когда-нибудь...
Или решили, что обернуть легко руками, следовательно не нужно усложнять текущий вариант.
Или никто не жаловался
да текущий вариант не так уж и плох. это скорее проблема ограниченности lambda выражений.
да текущий вариант не так уж и плох. это скорее проблема ограниченности lambda выражений.Вот уж за что я всегда был двумя руками (несмотря на всю свою 'питонутость') - так это за лябду, поддерживающую statement (хер с ними с multi-statement - я им не вижу нормального применения, но statement нужен). А то серьезно задалбывает иногда.
Короче, подразумевался 'однострочный statement', а не statement в нормальном понимании
задача - парсить файл
def c (x):
try:
x1 = float(x)
except ValueError:
return x
else:
if fabs(x1) > 50:
return x1
else:
return 0
...
tmp2 = map(c, tmp) # tmp2 = [ c(i) for i in tmp ]
print var
var type is float, допустим
?
To make print suppress its usual trailing newline, add a comma to the end of the statement:print "Foo",
print "Foo %s" % (bar
как узнать индекс (порядковые номер) слова в словаре?
короче, это нужно, чтобы перебрать все неповторяющиеся неупорядоченые пары слов из словаря
короче, открыл для себя enumerate
data += tmp2[1:len(tmp2)+1]
if len(tmp2)<5: data += [0,0,0,]
В data надо добавлять 6 чисел из tmp2, причем, если в tmp2 только 3 числа, остальное забивать нулями.
tmp2 = [нечто, n1, n2, n3]
или
tmp2=[нечто, n1, n2, n3, n4, n5,n6]
Нормально как это должно выглядеть?
следующее, вроде, еще и в подкатологи заглядывает
for files in os.walk(path):
for file in files[2]:
data += tmp2[1:] + [0]*(7-len(tmp2
[f for f in os.listdir(path) if os.path.isfile(f)]
?
[f for f in os.listdir(path) if os.path.isfile(os.path.join(path,f]
а если просто нужно в цикле по названиям пройти, не создавая списка файлов?
аццкий язык
code:Ну да, я для текущей директории написал. Также, для текущей можно было написать:
[f for f in os.listdir(path) if os.path.isfile(os.path.join(path,f]
...for f in filter(os.path.isfile, os.listdir(path...
А для не текущей директории я бы filter не использовал, ибо длинновато и сложновато, имхо.
а если просто нужно в цикле по названиям пройти, не создавая списка файлов?
А listdir что вернет? Напиши себе куда-нибудь в utils.py
def listfiles(path):
return [...]
...
for f in utils.listfiles(path):
...
Один фиг пригодится еще где-нибудь...
Либо 'в лоб' пиши. Ну появится лишний уровень вложенности, ну и фиг, возможно.
ЗЫ Я сейчас не в кондиции думать, так что может кто что лучше напишет
for x in y:
if x in some_condition:
аццкий языкЕсли по поводу
[0]*(7-len(tmp2
то мб ради 'вкуривания потомками слету' 7-len(tmp2) стоит вынести в нормально именованную переменную. И конструкция []* упростится, и станет ясно 'что за семерки и ваще, че это?'
Хмм, я же, вроде, написал про filter. Это примерно то, что нужно в таких случаях, если не приходится писать сложную/длинную лямбду и не нужно судорожно экономить память.
т.е.
for x in y if x in some_condition
корректно только в контексте
[x for x in y if x in some_condition]
но не в качестве цикла
?
потомков не предвидется )
т.е.ага
for x in y if x in some_condition
корректно только в контексте
[x for x in y if x in some_condition]
но не в качестве цикла
(a,b (c,d) --> (a+c,b+d)
map(operator.add, (a, b (c, d
а мне приснилось, что их можно было как-то просто складывать/вычитать без map?
сам пиши или используй готовые Scientific.Geometry.Vector
f = open (..)
for line in f:
то как внутри цикла перейти к следующей строчке?
f.next
Оставить комментарий
Makc500
1. Что принято ипользовать вместо select case?2. Как красиво избавить строку от лишних пробелов? Типа: