chippycentra
chippycentra

Reputation: 879

Keep only two part on element within a python list

I'm looking for a commande in python in order to only keep within a list the 3 first letters between content_content > con_con here is an example:

list_exp=["Babylona_expetiendra","Ocracylus_machabrus","Ojeris_multifasciatus"]

list_exp=["Bab_exp","Ocr_mac","Oje_mul"]

Does anyone have an idea? Thank you for your help .

Upvotes: 2

Views: 69

Answers (3)

hygull
hygull

Reputation: 8730

You can try like this.

Before running all these, just have a quick look at the use of list comprehension & join(), split() methods defined on strings.

>>> list_exp = ["Babylona_expetiendra","Ocracylus_machabrus","Ojeris_multifasciatus"]
>>> 
>>> output = ['_'.join([part[:3] for part in name.split("_")]) for name in list_exp]
>>> output
['Bab_exp', 'Ocr_mac', 'Oje_mul']
>>> 

Upvotes: 1

EvGEN Levakov
EvGEN Levakov

Reputation: 23

[
    *map(
        lambda strip:'_'.join([st[:3] for st in strip]),
        [
            *map(
                lambda s:s.split('_'),
                ["Babylona_expetiendra","Ocracylus_machabrus","Ojeris_multifasciatus"]
            )
        ]
    )
]

mess explanation:

First we are splitting every string in list by '_' gigving us

[['Babylona', 'expetiendra'], ['Ocracylus', 'machabrus'], ['Ojeris', 'multifasciatus']]

Then we are getting first 3 letters using [:3] for every string inside new lists

Finnaly joining again with '_'.join()

['Bab_exp', 'Ocr_mac', 'Oje_mul']

This example using map unpacking and lamdas

Upvotes: 1

Austin
Austin

Reputation: 26047

You can use a list-comprehension:

['_'.join(map(lambda x: x[:3], x.split('_'))) for x in list_exp]

Code:

list_exp=["Babylona_expetiendra","Ocracylus_machabrus","Ojeris_multifasciatus"]

print(['_'.join(map(lambda x: x[:3], x.split('_'))) for x in list_exp])
# ['Bab_exp', 'Ocr_mac', 'Oje_mul']

Upvotes: 4

Related Questions