Найти - Пользователи
Полная версия: Индекс в списке
Начало » Python для новичков » Индекс в списке
1 2 3
Ed
Ну и немного извращения:
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 )
reclosedev
odnochlen
fata1ex
except: pass

Так писать нельзя.
Нельзя-то нельзя, но не подскажешь ли, как получить список всех возможных исключений, которые может бросить код?
Если очень нужно поймать почти все исключения, лучше ловить Exception, потому что выше него только SystemExit, KeyboardInterrupt и GeneratorExit.

http://docs.python.org/library/exceptions.html#exception-hierarchy
fata1ex
В этом конкретном случае так делать нельзя, потому что:
>>> 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
Возможны сразу два исключения, которые мы поймаем и замнём, вовсе того не желая.
paraman
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

Вы действительно занимаете первое место, а так же получаете титул терпимости к новичкам. Остальным желаю приятных выходных и выражаю своё почтение. Пойду изучать данный код(новая для меня функция zip).
P.s. А можно ли в условие вставить диапазон: от 5 до 7, как пример?
Ed
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)
paraman
Ed
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)

Вы способны уничтожить мой мозг. Я ещё не дошёл до уровня такой оптимизации кода. (в строчку писать то, что занимает пару строк. Пока не способен его читать) А можно, как прежде?:

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

P.s. На тему сокращения кода(оптимизации), а можно ли как-то сократить, а то есть кусок кода, где после удовлетворения условия приходится писать такие портянки
minute.remove(m)
hour.remove(h)
second.remove(s)
year.remove(y)
и
minute = []
hour = []
second = []
year = []
Ed
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. На тему сокращения кода(оптимизации), а можно ли как-то сократить, а то есть кусок кода, где после удовлетворения условия приходится писать такие портянки
Можно. Только нужен код и отдельная тема.
paraman
Ed
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. На тему сокращения кода(оптимизации), а можно ли как-то сократить, а то есть кусок кода, где после удовлетворения условия приходится писать такие портянки
Можно. Только нужен код и отдельная тема.

Так по теме же:

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

И всё же не понимаю логику. Магия какая-то. Функция zip объединяет массивы(или же преобразует их вид в другой вид), затем мы преобразуем массив kgs в int и производим сравнение. Как же он потом вытаскивает индексы, да ещё и потом вытаскивает значения из других массивов с теми же индексами.
Чтобы было понятней:

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
>>>

Если нет желания объяснять, можно дать ссылку, где я смогу найти эту самую логику, а то под вечер уже хреново пользуюсь гуглом.
Ed
Забудьте про индексы. Это не Си, а Питон. В нем есть гораздо более мощные средства для работы с последовательностями.

Насчет удаления. Я не понимаю зачем удалять. Это только кусок кода, который никак не показывает необходимость удаления.

Насчет непонимания zip. Вы посмотрите что возвращает zip(kg, fruits, fruits2). Индексы здесь не нужны, это группировка элементов трех последовательностей в последовательность из троек. По-моему все очень просто.
fata1ex
paraman, возьмите любой учебник и прочитайте хотя бы первые пару сотен страниц. Лутц, Саммерфилд, Пилгрим. Это абсолютная база, которая расписана людьми специально для обучения. Без её понимания далеко не уйти.

Фразы вроде
paraman
мы преобразуем массив kgs в int и производим сравнение. Как же он потом вытаскивает индексы, да ещё и потом вытаскивает значения из других массивов с теми же индексами.
выдают, что вы этой базой не владеете, а значит нужно её приобретать.
.
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