Since you are not altering the actual author_names list, you can use membership instead of indexing.
for x in author_names:
author_last_names.append(x.split())
Since you are not altering the actual author_names list, you can use membership instead of indexing.
for x in author_names:
author_last_names.append(x.split())
Thank you very much for the input. However, I think this will print the whole name (first and last) but the task is to print last names only.
Thank you
Yeah, kind of breezed over that.
author_last_names.append(x.split()[-1])
Hi hoping to get something straightened out, just a general rule of thumb-
So you can not split twice, as it goes from a string (which you can split) to a list (which you can not).
Therefore, you need a ‘for’ statement to split a list, into a list of lists?
Have i got that correct?
thank you
Rather than guess, could you provide us with an example of what you wish to do?
authors = “Audre Lorde,Gabriela Mistral,Jean Toomer,An Qi,Walt Whitman,Shel Silverstein,Carmen Boullosa,Kamala Suraiyya,Langston Hughes,Adrienne Rich,Nikki Giovanni”
author_names = authors.split(‘,’)
so in the above example we split ‘authors’ into ‘author_names’. Then we were asked to get just the last names. Initially i tried to split ‘author_names’ by writing author_last_names = author_names.split().
Obviously that didn’t work. After reading up, im just trying to understand if the correct rule is - you can not split twice, as you can only split a string and not a list? And if you want to split a list you must include it inside a for statement(as in the example above creating author_last_names)?
Unless you have a str object. The methods are inherited from the type.
This was my solution, below:
def authors_last_names(names):
last_names = []
for i in names:
last_names.append(i.split()[-1])
return last_names
print(authors_last_names(author_names))
author_last_names = authors_last_names(author_names)
@jacielbarros nice solution! I suppose you could have reversed the final two lines to make the assignment first and just print the assigned variable to tidy it up cleaner but looks great!
Hi,
I might have been butting my head on this for too long, and I see that there is a lot of people who have asked for help with this assignment. I think I see myself tunnel-visioning a bit, so in hope to get some help, here is my code:
I am pretty sure that what I am doing wrong is creating a list where each last name is in its own sublist, instead of existing as an index of one list (without sub-elements), and that this is why it comes back as being wrong. But right now I feel a bit locked. Any of you got any tips to see this problem from a different perspective? I see multiple solutions here, which seems to be good, but I want to understand how I got here, instead of just learning from a separate solution.
Thanks in advance for your time.
Line 10 is over-indented. See if that fixes your problem.
Thanks for the tip, should I consider it a general rule of thump in python to keep return at the first indention level?
It did not fix the problem though :S Still returns me a list, where each last name is in itself a sublist, instead of an element of a list.
For expected results, return
is best not inside the loop, else it terminates both the loop and the function without completion.
Please post the formatted code in a reply, this time not as a Codebyte.
Thanks for explaining this in detail, I was having the same problem. Rereading posted solutions and being confused when I saw [-1]. I would see [-1] and think that it was only taking the last element in the string. Now I see that it is reading from the last element on, until it reaches " " indicated by the empty split method .split().
From this I was able to come up with this code.
author_names = authors.split(",")
author_last_names = [names.split()[-1] for names in author_names]
print(author_last_names)