Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2010 21:16:09

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

как отфильтровать список от строк с парными символами то есть те которые находятся рядом вот так-
fffds
fffdj
fffdk
fffdl
fffjj
fffjk
fffjl

А не так fgsdf !



Офлайн

#2 Авг. 18, 2010 21:36:09

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

решение в лоб

str = "fffas"
x=0
while x !=len(str):
if str[x] == str[x+1]:
True
break
else:
False
if False:
del str



Отредактировано (Авг. 18, 2010 21:37:33)

Офлайн

#3 Авг. 18, 2010 22:25:51

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

Alex_Kutsan
решение в лоб
str = "fffas"
x=0
while x !=len(str):
if str[x] == str[x+1]:
True
break
else:
False
if False:
del str
Не могу понять как это со списком строк в файле сделать !?



Отредактировано (Авг. 19, 2010 01:01:23)

Офлайн

#4 Авг. 19, 2010 01:17:58

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

если список типа list
к примеру

list = ["fffds","fffdj","fffdk","fffdl","fffjj","fffjk,"fffjl"]
for str in list:
while x !=len(str):
if str[x] == str[x+1]:
True
break
else:
False
if False:
str = ""
nstr = 0
l = len(list)
while nstr!= l:
if list[nstr]=="":
for x in list [nstr:]:
list[x] = list[x+1]
l = l-1
nstr = nstr +1
простите за милион синтаксических ошибок и индесский код. Но у меня щяс пол второго ночи и мне не думается, рашал как говорится в лоб. Спасибо кстати, заставили немного хоть теори алгоритмов вспомнить.

Если непонятен коод.
Обьясню на пальцах. Т.к Код громоздок , его можно записать в 10 раз меньше и быстрее.
1. Есть список Срок
2. Ишю такие строки в которые повторяется соседние 2 символа ( X и X+1)
3. Если с в строке не повторяется 2 символа заменяю её на пустую строку (“”)
4. Удаляю все пустые строки( полистайе учебник там из списка можно удалить строку одной командой, а не такой дребеденью что я навалял сейчас)



Офлайн

#5 Авг. 19, 2010 08:01:15

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

фильтр строк?

Только не благодари меня:

>>> list_src = ['fffds', 'fffdj', 'fffdk', 'fffdl', 'fffjj','fffjk', 'fffjl',  'fgsdf']
>>> list_prs = []
>>> list_sng = []
>>> for s in list_src:
... [list_sng, list_prs][1 in map(len, map(set, zip(list(s) + [None], [None] + list(s))))].append(s)
...
>>> list_prs
['fffds', 'fffdj', 'fffdk', 'fffdl', 'fffjj', 'fffjk', 'fffjl']
>>> list_sng
['fgsdf']
..bw



Офлайн

#6 Авг. 19, 2010 09:20:28

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

фильтр строк?

bw
TC же просил отфильтровать, а не разделить…
полагаю, что в качестве фильтрующего генератора Ваш вариант выглядит более читабельно

from itertools import imap, izip
(x for x in lst if 1 not in imap(len, imap(set, izip(x[1:], x[:-1]))))



Отредактировано (Авг. 19, 2010 10:03:05)

Офлайн

#7 Авг. 19, 2010 13:46:36

ivadim
От:
Зарегистрирован: 2010-08-17
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

pyuser
TC же просил отфильтровать, а не разделить…
полагаю, что в качестве фильтрующего генератора Ваш вариант выглядит более читабельно

from itertools import imap, izip
(x for x in lst if 1 not in imap(len, imap(set, izip(x[1:], x[:-1]))))
Вот за это мне и нравится Питон :)



Офлайн

#8 Авг. 19, 2010 13:48:19

Malinaizer
От:
Зарегистрирован: 2009-03-28
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

Спасибо всем очень помогло!



Офлайн

#9 Авг. 19, 2010 13:50:44

ivadim
От:
Зарегистрирован: 2010-08-17
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

фильтр строк?

А я додуматся только смог до:

def list_filter_classic(list_src):
list_dst=[]
for string in list_src:
for i in xrange(len(string)-1):
flag=False
if string[i]==string[i+1]:
flag=True
break
if flag is False:
list_dst.append(string)
return list_dst



Офлайн

#10 Авг. 19, 2010 13:56:11

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

фильтр строк?

а я вообще не понял чего надо сделать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version