Найти - Пользователи
Полная версия: Python 3 Удаление лишнего символа у каждого элемента списка
Начало » Python для новичков » Python 3 Удаление лишнего символа у каждого элемента списка
1 2 3 4
Budulianin
GGnoob
Допустим, я с начала записываю все столбцы в списки. Нахожу в первом списке максимальные значения и, если их несколько, перехожу ко второму списку и так далее до последнего столбца.

Есть другие ? норм способ, я так и сделал
GGnoob
Budulianin
Ну эт я в общий алгоритм описал. А вот есть такая загвоздка в нем: после того, как я нахожу максимальные элементы в первом столбце-списке, как найти наксимальные елементы во втором столбце, но уже только среди тех элементов, которые находятся на одной строке с элементами из 1го столбца и то же самое для 3го столбца, т.е. мне надо как-то номер строки постоянно “держать в уме”. В общем думаю понятно объяснил
Budulianin
GGnoob

Собрал все строки из файла, выбрал из них те(либо новый список создал, либо номер запомнил), в которых максимальный элемент в 1 столбце, тоже самое для получившегося списка(или того же, если номера запоминал), только для следующего столбца и т.д.

Можешь использовать функцию max задав принцип выбора, через key.

искать строку с максимальным значением во втором столбце:
lst = [(1,2), (10,-1)]
max(lst, key=lambda x: x[1])
>>>(1, 2)
py.user.next
GGnoob
Есть еще один вопрос немного по другой теме: в файле имеется еще один столбец с % комиссий. Мне нужно найти такую строку в файле, у которой будет наивысшее значение в столбце “цена”, но если наивысших значений несколько, то нужно найти еще наивысшую комиссию (т.е. искомой будет строка в файле и с наивысшей ценой, и с наивысшей комиссией, если наивысших цен несколько). Как подобное можно реализовать?

GGnoob
А вот есть такая загвоздка в нем: после того, как я нахожу максимальные элементы в первом столбце-списке, как найти наксимальные елементы во втором столбце, но уже только среди тех элементов, которые находятся на одной строке с элементами из 1го столбца и то же самое для 3го столбца, т.е. мне надо как-то номер строки постоянно “держать в уме”.

это всё можно сделать за один проход
нужно подготовить двумерный массив, в котором строка - (цена, комиссия)
(сортировка - это не один проход)


Budulianin
line.append(count.next())# в Python 3.x count.__next__()
используй next(count), методы типа __name__() для того и названы так, чтобы их не вызывали вручную

Budulianin
Можешь использовать функцию max задав принцип выбора, через key.
можно попробовать за один проход

>>> (4, 3) < (5, 2)
True
>>> (5, 3) < (5, 2)
False
>>> (5, 3) < (5, 4)
True
>>>

в принципе, key даже не нужен
>>> p = max([(4, 3), (5, 2), (5, 3), (5, 4), (5, 2), (5, 3)])
>>> print(p)
(5, 4)
>>>

с номером строки
>>> lst = [(4, 3),
...        (5, 2),
...        (5, 3),
...        (5, 4),
...        (5, 2),
...        (5, 3)]
>>> 
>>> p = max(enumerate(lst, 1), key=lambda i: i[1])
>>> print(p)
(4, (5, 4))
>>>

ускоритель взятия элемента
>>> import operator
>>> 
>>> lst = [(4, 3),
...        (5, 2),
...        (5, 3),
...        (5, 4),
...        (5, 2),
...        (5, 3)]
>>> 
>>> p = max(enumerate(lst, 1), key=operator.itemgetter(1))
>>> print(p)
(4, (5, 4))
>>>
Budulianin
py.user.next
Budulianin
line.append(count.next())# в Python 3.x count.__next__()
используй next(count), методы типа __name__() для того и названы так, чтобы их не вызывали вручную

Коммент читай, в 3.x у Count() нету метода next, только __next__, поэтому решил его написать

Но иногда можно :)

Budulianin
в принципе, key даже не нужен
Да, убрал условие, так же норм отрабатывает, спасибо



py.user.next
Budulianin
Коммент читай, в 3.x у Count() нету метода next, только __next__, поэтому решил его написать
и для .next() и для __next__() тем более вызывай глобальную функцию next()
раньше её не было, вызывали .next(), потом добавили (где-то pep есть)

add
нашёл pep
Budulianin
py.user.next
вызывай глобальную функцию next()
Да, там built-in function next, не знал, не пользуюсь 3.x
Спасибо
py.user.next
Budulianin
Да, там built-in function next, не знал, не пользуюсь 3.x
в python 2.6 тоже есть
Budulianin
py.user.next
в python 2.6 тоже есть

Да, точно :) а я методом пользовался, не знал
GGnoob
Спасибо py.user.next и Budulianin за полезные советы!
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