Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2014 11:46:49

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Списки

Добрый день, подскажите пожалуйста.

Есть список путей, к примеру:
a = ('C:\test' , ‘C:\test\1’, ‘C:\test\2’, ‘C:\test\2\3’)

как исключить из списка C:\test и C:\test\2, так как они входят в C:\test\1 и C:\test\2\3



Офлайн

#2 Июль 16, 2014 16:16:04

Hyyudu
Зарегистрирован: 2014-07-15
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Списки

for x in a[:]:
    a=filter (lambda t: not (x.startswith(t) and x != t), a)
Только надо, чтобы a было списком, а не кортежем (не в круглых скобках должно быть, а в квадратных)

Отредактировано Hyyudu (Июль 16, 2014 16:16:18)

Офлайн

#3 Июль 16, 2014 16:41:21

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Списки

Hyyudu: Скобки я проглядел, действительно в квадратных должны быть.
Попробовал в действие код, он выдал:
C:\test\1
C:\test\2
C:\test\2\3

C:\test\2 входит в C:\test\2\3, его по идее нужно было отбросить.



Офлайн

#4 Июль 16, 2014 17:36:34

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Списки

У меня все правильно работает!

>>> a = [r'C:\test' , r'C:\test\1', r'C:\test\2', r'C:\test\2\3']
>>> for x in a:
...     a = filter(lambda t: not (x.startswith(t) and x != t), a)
... 
>>> a
['C:\\test\\1', 'C:\\test\\2\\3']



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Июль 17, 2014 04:14:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Списки

Patrik
как исключить из списка C:\test и C:\test\2, так как они входят в C:\test\1 и C:\test\2\3

Строка “C:\test” входит во все эти строки.



Отредактировано py.user.next (Июль 17, 2014 04:15:17)

Офлайн

#6 Июль 17, 2014 10:23:54

Hyyudu
Зарегистрирован: 2014-07-15
Сообщения: 10
Репутация: +  1  -
Профиль   Отправить e-mail  

Списки

Patrik, вы слеши в строках не экранировали, может, в этом дело

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version