pofi
pofi

Reputation: 11

How to look for specific lines in a list of lines starting with one element of another list?

I do have a list which looks like:

a = [3,5]

and a list of lines which looks like:

b = ['1, 0.000000e+00, 0.000000e+00, 1.000000e+00\n', '2, 0.000000e+00, 0.000000e+00, 0.000000e+00\n', '3, 0.000000e+00, 1.000000e+00, 1.000000e+00\n', '4, 0.000000e+00, 1.000000e+00, 0.000000e+00\n', '5, 1.000000e+00, 0.000000e+00, 1.000000e+00\n']

i want to make a new list of lines which only contains those lines starting with the numbers of a. it should look like:

newlist = ['3, 0.000000e+00, 1.000000e+00, 1.000000e+00\n', '5, 1.000000e+00, 0.000000e+00, 1.000000e+00\n']

I do know that there is a command like if line in ... line.startswith().... I managed only for explicit numbers to search for, but not from a list of numbers. Does someone know how to handle that?

Upvotes: 0

Views: 49

Answers (3)

rdas
rdas

Reputation: 21285

Use a list-comprehension with a condition that checks against each value in a

a = [3,5]

b = ['1, 0.000000e+00, 0.000000e+00, 1.000000e+00\n', '2, 0.000000e+00, 0.000000e+00, 0.000000e+00\n', '3, 0.000000e+00, 1.000000e+00, 1.000000e+00\n', '4, 0.000000e+00, 1.000000e+00, 0.000000e+00\n', '5, 1.000000e+00, 0.000000e+00, 1.000000e+00\n']

newlist = [
    line for line in b if any(line.startswith(str(num) + ',') for num in a)
]

print(newlist)

Which results in:

['3, 0.000000e+00, 1.000000e+00, 1.000000e+00\n', '5, 1.000000e+00, 0.000000e+00, 1.000000e+00\n']

Upvotes: 1

pofi
pofi

Reputation: 11

can you please try with these two list?

a=[11, 12, 9, 10, 17, 18, 19, 20, 2, 6, 4, 1, 13, 14, 15, 16, 3, 5, 7, 8, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]

b=['1, 0.000000e+00, 0.000000e+00, 1.000000e+00\n', '2, 0.000000e+00, 0.000000e+00, 0.000000e+00\n', '3, 0.000000e+00, 1.000000e+00, 1.000000e+00\n', '4, 0.000000e+00, 1.000000e+00, 0.000000e+00\n', '5, 1.000000e+00, 0.000000e+00, 1.000000e+00\n', '6, 1.000000e+00, 0.000000e+00, 0.000000e+00\n', '7, 1.000000e+00, 1.000000e+00, 1.000000e+00\n', '8, 1.000000e+00, 1.000000e+00, 0.000000e+00\n', '9, 0.000000e+00, 0.000000e+00, 3.333333e-01\n', '10, 0.000000e+00, 0.000000e+00, 6.666667e-01\n', '11, 0.000000e+00, 3.333333e-01, 1.000000e+00\n', '12, 0.000000e+00, 6.666667e-01, 1.000000e+00\n', '13, 0.000000e+00, 1.000000e+00, 3.333333e-01\n', '14, 0.000000e+00, 1.000000e+00, 6.666667e-01\n', '15, 0.000000e+00, 3.333333e-01, 0.000000e+00\n', '16, 0.000000e+00, 6.666667e-01, 0.000000e+00\n', '17, 1.000000e+00, 0.000000e+00, 3.333333e-01\n', '18, 1.000000e+00, 0.000000e+00, 6.666667e-01\n', '19, 1.000000e+00, 3.333333e-01, 1.000000e+00\n', '20, 1.000000e+00, 6.666667e-01, 1.000000e+00\n', '21, 1.000000e+00, 1.000000e+00, 3.333333e-01\n', '22, 1.000000e+00, 1.000000e+00, 6.666667e-01\n', '23, 1.000000e+00, 3.333333e-01, 0.000000e+00\n', '24, 1.000000e+00, 6.666667e-01, 0.000000e+00\n', '25, 3.333333e-01, 0.000000e+00, 0.000000e+00\n', '26, 6.666667e-01, 0.000000e+00, 0.000000e+00\n', '27, 3.333333e-01, 0.000000e+00, 1.000000e+00\n', '28, 6.666667e-01, 0.000000e+00, 1.000000e+00\n', '29, 3.333333e-01, 1.000000e+00, 0.000000e+00\n', '30, 6.666667e-01, 1.000000e+00, 0.000000e+00\n', '31, 3.333333e-01, 1.000000e+00, 1.000000e+00\n', '32, 6.666667e-01, 1.000000e+00, 1.000000e+00\n', '33, 0.000000e+00, 3.333333e-01, 3.333333e-01\n', '34, 0.000000e+00, 6.666667e-01, 3.333333e-01\n', '35, 0.000000e+00, 3.333333e-01, 6.666667e-01\n', '36, 0.000000e+00, 6.666667e-01, 6.666667e-01\n', '37, 1.000000e+00, 3.333333e-01, 6.666667e-01\n', '38, 1.000000e+00, 6.666667e-01, 6.666667e-01\n', '39, 1.000000e+00, 3.333333e-01, 3.333333e-01\n', '40, 1.000000e+00, 6.666667e-01, 3.333333e-01\n', '41, 3.333333e-01, 0.000000e+00, 3.333333e-01\n', '42, 3.333333e-01, 0.000000e+00, 6.666667e-01\n', '43, 6.666667e-01, 0.000000e+00, 3.333333e-01\n', '44, 6.666667e-01, 0.000000e+00, 6.666667e-01\n', '45, 6.666667e-01, 1.000000e+00, 3.333333e-01\n', '46, 6.666667e-01, 1.000000e+00, 6.666667e-01\n', '47, 3.333333e-01, 1.000000e+00, 3.333333e-01\n', '48, 3.333333e-01, 1.000000e+00, 6.666667e-01\n', '49, 3.333333e-01, 3.333333e-01, 0.000000e+00\n', '50, 6.666667e-01, 3.333333e-01, 0.000000e+00\n', '51, 3.333333e-01, 6.666667e-01, 0.000000e+00\n', '52, 6.666667e-01, 6.666667e-01, 0.000000e+00\n', '53, 3.333333e-01, 6.666667e-01, 1.000000e+00\n', '54, 6.666667e-01, 6.666667e-01, 1.000000e+00\n', '55, 3.333333e-01, 3.333333e-01, 1.000000e+00\n', '56, 6.666667e-01, 3.333333e-01, 1.000000e+00\n', '57, 3.333333e-01, 3.333333e-01, 6.666667e-01\n', '58, 6.666667e-01, 3.333333e-01, 6.666667e-01\n', '59, 3.333333e-01, 6.666667e-01, 6.666667e-01\n', '60, 6.666667e-01, 6.666667e-01, 6.666667e-01\n', '61, 3.333333e-01, 3.333333e-01, 3.333333e-01\n', '62, 6.666667e-01, 3.333333e-01, 3.333333e-01\n', '63, 3.333333e-01, 6.666667e-01, 3.333333e-01\n', '64, 6.666667e-01, 6.666667e-01, 3.333333e-01\n']

Upvotes: 0

wasif
wasif

Reputation: 15488

Try list comprehension:

print([x for x in b if x[0] in [str(y) for y in a]])

Upvotes: 0

Related Questions