List of paths

Paul McGuire ptmcg at austin.rr.com
Wed Apr 1 14:37:03 EDT 2009


On Apr 1, 3:57 am, Nico Grubert <nicogrub... at gmail.com> wrote:
> Dear Python developers
>
> I have the following (sorted) list.
> ['/notebook',
>   '/notebook/mac',
>   '/notebook/mac/macbook',
>   '/notebook/mac/macbookpro',
>   '/notebook/pc',
>   '/notebook/pc/lenovo',
>   '/notebook/pc/hp',
>   '/notebook/pc/sony',
>   '/desktop',
>   '/desktop/pc/dell',
>   '/desktop/mac/imac',
>   '/server/hp/proliant',
>   '/server/hp/proliant/385',
>   '/server/hp/proliant/585'
> ]
>
> I want to remove all paths x from the list if there is a path y in the
> list which is part of x so y.startswith(x) is true.
>
> The list I want to have is:
> ['/notebook', '/desktop', '/server/hp/proliant']
>
> Any idea how I can do this in Python?
>
> Thanks in advance
> Nico

paths = ['/notebook',
  '/notebook/mac',
  '/notebook/mac/macbook',
  '/notebook/mac/macbookpro',
  '/notebook/pc',
  '/notebook/pc/lenovo',
  '/notebook/pc/hp',
  '/notebook/pc/sony',
  '/desktop',
  '/desktop/pc/dell',
  '/desktop/mac/imac',
  '/server/hp/proliant',
  '/server/hp/proliant/385',
  '/server/hp/proliant/585'
]

seen = set()
basepaths = [ seen.add(s) or s for s in paths
            if not any(s.startswith(ss) for ss in seen) ]

gives:

['/notebook', '/desktop', '/server/hp/proliant']

-- Paul



More information about the Python-list mailing list