Reputation: 1781
Code
#Variables
var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']
list1 = []
for x in var1:
splitted = x.split()
a = [splitted[0] + ' ' + splitted[1]]
list1.append(a)
print(list1)
Output
[['Warehouse Pencil']]
[['Warehouse Pencil'], ['Production Pen']]
Goal
I am intending to split the list, grab the 1st and 2nd words for each section, and put them into a new list.
Question
Why is my output giving me a weird output? Where am I going wrong?
Desired Output
My desired output should look like this:
['Warehouse Pencil', 'Production Pen']
Grabbing the 1st and 2nd words and put them into 1 list.
Upvotes: 6
Views: 795
Reputation: 23
Since this keyword hasn't been mentioned in the other answers, you can just extend your list instead of appending it.
var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']
list1 = []
for x in var1:
splitted = x.split()
a = [splitted[0] + ' ' + splitted[1]]
list1.extend(a) # Notice the difference here!
print(list1)
Upvotes: 0
Reputation: 411
To get the filename. We can use the following approach.
import pathlib
var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']
file_name = []
for i in var1:
p = pathlib.Path(i)
file_name.append(p.stem)
print(file_name)
['Warehouse Pencil 1', 'Production Pen 20']
[Program finished]
Upvotes: 0
Reputation: 17814
You can also use the method str.rfind(sub)
. It returns the highest index in the string where substring sub
(space in your case) is found:
[i[:i.rfind(' ')] for i in var1]
# ['Warehouse Pencil', 'Production Pen']
Alternatively, you can use the method str.rsplit()
. It splits the string starting from the right:
[i.rsplit(maxsplit=1)[0] for i in var1]
# ['Warehouse Pencil', 'Production Pen']
Upvotes: 1
Reputation: 14506
This should fix it - move the print statement out of the loop, and make a
a string rather than a list.
#Variables
var1 = ['Warehouse Pencil 1.docx', 'Production Pen 20.docx']
list1 = []
for x in var1:
splitted = x.split()
a = splitted[0] + ' ' + splitted[1]
list1.append(a)
print(list1)
Output:
['Warehouse Pencil', 'Production Pen']
You could also use a list comprehension:
>>> [' '.join(x.split()[:2]) for x in var1]
['Warehouse Pencil', 'Production Pen']
Upvotes: 17