By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
431,819 Members | 1,459 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 431,819 IT Pros & Developers. It's quick & easy.

Using wild character

P: n/a
hi,

I am a beginner in Python. I wish to know how can i filter a list of
strings using wild characters.ie
Lets say i have list countries =
["india","africa","atlanta","artica","nigeria"]. I need only the list
of string starting with 'a'.
thank you

Sreeraj

Sep 6 '07 #1
Share this Question
Share on Google+
9 Replies


P: n/a
On 9/6/07, Sreeraj <sr**********@gmail.comwrote:
hi,

I am a beginner in Python. I wish to know how can i filter a list of
strings using wild characters.ie
Lets say i have list countries =
["india","africa","atlanta","artica","nigeria"]. I need only the list
of string starting with 'a'.
There are a few ways of doing so. For some simple operations there are
functions on the strings, If you want some more complex "filtering"
then have a look at Python's regular expression module "re".

example:
>>l = ["india","africa","atlanta","artica","nigeria"]
al = [c for c in l if c.startswith('a')] # this is a list comprehension
al
['africa', 'atlanta', 'artica']

To know more about list comprehensions, have a look at:
http://docs.python.org/tut/node7.htm...00000000000000

Methods on strings:
http://docs.python.org/lib/string-me...string-methods

Btw, not all of names in your list are countries !

Cheers,

--
----
Amit Khemka
website: www.onyomo.com
wap-site: www.owap.in
Sep 6 '07 #2

P: n/a
i hope this may help you.

countries = ["india","africa","atlanta","artica","nigeria"]
filtered = filter(lambda item: item.startswith('a'), l)

Sep 6 '07 #3

P: n/a
i will this may help you.

countries = ["india","africa","atlanta","artica","nigeria"]
filter(lambda country: country.startswith('a'), countries)

Sep 6 '07 #4

P: n/a
On Sep 5, 10:00 pm, Sreeraj <sreeraj22...@gmail.comwrote:
hi,

I am a beginner in Python. I wish to know how can i filter a list of
strings using wild characters.ie
Lets say i have list countries =
["india","africa","atlanta","artica","nigeria"]. I need only the list
of string starting with 'a'.

thank you

Sreeraj
The most thorough answer would no doubt involve regular expressions,
but they can be unpleasant.

To do a "string*" type wildcard filter as in your request:

myList = ["india","africa","atlanta","artica","nigeria"]

newList = [ item for item in myList if item.startswith("a") ]
To do a "*string" wildcard filter use the endswith() function instead
of startswith() and to do a *string* type wildcard filter use
the find() function -1.

Sep 6 '07 #5

P: n/a
Sreeraj schrieb:
hi,

I am a beginner in Python. I wish to know how can i filter a list of
strings using wild characters.ie
Lets say i have list countries =
["india","africa","atlanta","artica","nigeria"]. I need only the list
of string starting with 'a'.
While the startswith-method others pointed out works, I wanted to direct
you attention to the module fnmatch.

http://www.python.org/doc/current/li...e-fnmatch.html

It will work with real wildcards.

Diez
Sep 6 '07 #6

P: n/a
On Wed, 05 Sep 2007 22:54:55 -0700, TheFlyingDutchman wrote:
To do a "*string" wildcard filter use the endswith() function instead
of startswith() and to do a *string* type wildcard filter use
the find() function -1.
Maybe better the ``in`` operator for the '*string*' type. `str.find()`
will go away in the future.

Ciao,
Marc 'BlackJack' Rintsch
Sep 6 '07 #7

P: n/a
On Sep 6, 12:47 am, Marc 'BlackJack' Rintsch <bj_...@gmx.netwrote:
On Wed, 05 Sep 2007 22:54:55 -0700, TheFlyingDutchman wrote:
To do a "*string" wildcard filter use the endswith() function instead
of startswith() and to do a *string* type wildcard filter use
the find() function -1.

Maybe better the ``in`` operator for the '*string*' type. `str.find()`
will go away in the future.

Ciao,
Marc 'BlackJack' Rintsch
string.find serves a useful purpose in that it returns the starting
location of the string found, or -1 if not found, so if you wanted to
slice "abdecf" on"c", string.find will tell you where that is.

Sep 6 '07 #8

P: n/a
En Thu, 06 Sep 2007 22:19:56 -0300, TheFlyingDutchman <zz******@aol.com>
escribi�:
The Perl community has an expression "There is more than one way to do
it". As in, Perl is good because you have multiple choices (whether
it's a function/module/class/operator) of how to implement a
particular piece of logic. More choices is often good, but this can
lead to a problem in that you might be presented with more things to
learn and or you come across less common ways of doing something that
you are not familiar with in code you are trying to understand.

Does the Python community have a position regarding duplicate ways in
the language to achieve something in your code?
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
(Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
pyimport this

--
Gabriel Genellina

Sep 7 '07 #9

P: n/a
On Thu, 06 Sep 2007 16:48:31 -0700, Zentrader wrote:
On Sep 6, 12:47 am, Marc 'BlackJack' Rintsch <bj_...@gmx.netwrote:
>On Wed, 05 Sep 2007 22:54:55 -0700, TheFlyingDutchman wrote:
To do a "*string" wildcard filter use the endswith() function instead
of startswith() and to do a *string* type wildcard filter use
the find() function -1.

Maybe better the ``in`` operator for the '*string*' type. `str.find()`
will go away in the future.

string.find serves a useful purpose in that it returns the starting
location of the string found, or -1 if not found, so if you wanted to
slice "abdecf" on"c", string.find will tell you where that is.
But that position is not needed here and I think::

result = [name for name in names if 'spam' in name]

reads more natural than::

result = [name for name in names if name.find('spam') -1]

Ciao,
Marc 'BlackJack' Rintsch
Sep 7 '07 #10

This discussion thread is closed

Replies have been disabled for this discussion.