Найти - Пользователи
Полная версия: фильтр строк?
Начало » Python для новичков » фильтр строк?
1 2 3
Malinaizer
как отфильтровать список от строк с парными символами то есть те которые находятся рядом вот так-
fffds
fffdj
fffdk
fffdl
fffjj
fffjk
fffjl

А не так fgsdf !
Alex_Kutsan
решение в лоб
str = "fffas"
x=0
while x !=len(str):
if str[x] == str[x+1]:
True
break
else:
False
if False:
del str
Malinaizer
Alex_Kutsan
решение в лоб
str = "fffas"
x=0
while x !=len(str):
if str[x] == str[x+1]:
True
break
else:
False
if False:
del str
Не могу понять как это со списком строк в файле сделать !?
Alex_Kutsan
если список типа 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. Удаляю все пустые строки( полистайе учебник там из списка можно удалить строку одной командой, а не такой дребеденью что я навалял сейчас)
bw
Только не благодари меня:
>>> 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
pyuser
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]))))
ivadim
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]))))
Вот за это мне и нравится Питон :)
Malinaizer
Спасибо всем очень помогло!
ivadim
А я додуматся только смог до:
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
Ed
а я вообще не понял чего надо сделать.
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