Форум сайта python.su
13
Ну и немного извращения:
print '\n'.join("kg: %s %s and %s" % item for item in zip(kg, fruits, fruits2) if item[0].isdigit() and int(item[0]) >= 5 )
Офлайн
173
odnochlenЕсли очень нужно поймать почти все исключения, лучше ловить Exception, потому что выше него только SystemExit, KeyboardInterrupt и GeneratorExit.fata1exНельзя-то нельзя, но не подскажешь ли, как получить список всех возможных исключений, которые может бросить код?
except: pass
Так писать нельзя.
Офлайн
52
В этом конкретном случае так делать нельзя, потому что:
>>> a = [1,2,3] >>> a.index(4) Traceback (most recent call last): File "<input>", line 1, in <module> ValueError: 4 is not in list >>> a[3] Traceback (most recent call last): File "<input>", line 1, in <module> IndexError: list index out of range
Отредактировано fata1ex (Июль 14, 2012 16:40:49)
Офлайн
1
Ed
И я хочу поучаствовать в конкурсе телепатов. Претендую на первое местоfruits = ['Apricot', 'Avocado', 'Pawpaw', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'Pomegranate'] fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi'] kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4'] for kgs, fr1, fr2 in zip(kg, fruits, fruits2): try: if int(kgs) >= 5: print 'kg:', kgs, fr1, 'and', fr2 except ValueError: continue
Офлайн
13
paramanКак пример … легко!:
P.s. А можно ли в условие вставить диапазон: от 5 до 7, как пример?
print '\n'.join("kg: %s %s and %s" % item for item in zip(kg, fruits, fruits2) if item[0].isdigit() and 5<=int(item[0])<=7)
Отредактировано Ed (Июль 14, 2012 21:23:56)
Офлайн
1
EdparamanКак пример … легко!:
P.s. А можно ли в условие вставить диапазон: от 5 до 7, как пример?print '\n'.join("kg: %s %s and %s" % item for item in zip(kg, fruits, fruits2) if item[0].isdigit() and 5<=int(item[0])<=7)
fruits = ['Apricot', 'Avocado', 'Pawpaw', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'Pomegranate'] fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi'] kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4'] for kgs, fr1, fr2 in zip(kg, fruits, fruits2): try: if int(kgs) >= 5: print 'kg:', kgs, fr1, 'and', fr2 except ValueError: continue
minute.remove(m) hour.remove(h) second.remove(s) year.remove(y)
minute = [] hour = [] second = [] year = []
Офлайн
13
paramanТак пойдет?
А можно, как прежде?:
fruits = ['Apricot', 'Avocado', 'Pawpaw', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'Pomegranate'] fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi'] kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4'] for kgs, fr1, fr2 in zip(kg, fruits, fruits2): if kgs.isdigit() and 5<=int(kgs)<=7: print 'kg:', kgs, fr1, 'and', fr2
P.s. На тему сокращения кода(оптимизации), а можно ли как-то сократить, а то есть кусок кода, где после удовлетворения условия приходится писать такие портянкиМожно. Только нужен код и отдельная тема.
Офлайн
1
EdparamanТак пойдет?
А можно, как прежде?:fruits = ['Apricot', 'Avocado', 'Pawpaw', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'Pomegranate'] fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi'] kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4'] for kgs, fr1, fr2 in zip(kg, fruits, fruits2): if kgs.isdigit() and 5<=int(kgs)<=7: print 'kg:', kgs, fr1, 'and', fr2P.s. На тему сокращения кода(оптимизации), а можно ли как-то сократить, а то есть кусок кода, где после удовлетворения условия приходится писать такие портянкиМожно. Только нужен код и отдельная тема.
fruits = ['Apricot', 'Avocado', 'None', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'None'] fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi'] kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4'] for fr1, fr2, kgs in zip(fruits, fruits2, kg): try: if fr1 == 'None': fruits.remove(fr1) fruits2.remove(fr2) kg.remove(kgs) except ValueError: continue
kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4'] f = zip(kg) print f [('10',), ('4',), ('10',), ('6',), ('13',), ('1',), ('13',), ('36:7',), ('10',), ('20:10',), ('4',)] int(f[1]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: int() argument must be a string or a number, not 'tuple' >>> int(kg[1]) 4
>>> a = [66.25, 333, 333, 1, 1234.5] >>> zip(a) [(66.25,), (333,), (333,), (1,), (1234.5,)] >>> a1 = zip(a) >>> a1.index(333) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 333 is not in list >>> a.index(333) 1 >>>
Офлайн
13
Забудьте про индексы. Это не Си, а Питон. В нем есть гораздо более мощные средства для работы с последовательностями.
Насчет удаления. Я не понимаю зачем удалять. Это только кусок кода, который никак не показывает необходимость удаления.
Насчет непонимания zip. Вы посмотрите что возвращает zip(kg, fruits, fruits2). Индексы здесь не нужны, это группировка элементов трех последовательностей в последовательность из троек. По-моему все очень просто.
Офлайн
52
paraman, возьмите любой учебник и прочитайте хотя бы первые пару сотен страниц. Лутц, Саммерфилд, Пилгрим. Это абсолютная база, которая расписана людьми специально для обучения. Без её понимания далеко не уйти.
Фразы вроде
paramanвыдают, что вы этой базой не владеете, а значит нужно её приобретать.
мы преобразуем массив kgs в int и производим сравнение. Как же он потом вытаскивает индексы, да ещё и потом вытаскивает значения из других массивов с теми же индексами.
Офлайн