Output loop result into a list - python

Someone please help me with this code:
agerlist = for agern in anime.info['Genres']:
print agern['name']
Is there any way to save the output into one variable? An example would be: alist = agern in anime.info ?

You mean like this?
alist = [ x['name'] for x in anime.info['Genre']]

Create an empty list and then append the results of for loop to that list or you could use list comprehension.
l = []
for agern in anime.info['Genres']:
l.append(agern['name'])
print l

you could also store that into a generator function, something like this:
for agern in anime.info['Genres']:
yield agern['name']
so that you will actually compute this thing only on request, i.e. during a for cycle, so you will not store in memory each agern['name'] two times.

Related

How to append string into list using list comprehension

Ex:
a = []
a.append('Hello')
Which will give the output: ['Hello']
Could you please tell me How to do the same using list comprehension?
You actually do not need to use list comprehension here. Just simply do:
a=['Hello']
You can do it by doing
a = ['Hello' for i in range(1)]
But it will just lead to more memory allocation than needed.
If you only have
a = []
a.append('Hello')
as you know, it would be most practical to simply do
a = ['Hello']
But if you want to append multiple 'Hello's to the list, you can do it like
a = ['Hello' for _ in range(amount)]
Where the amount variable should be replaced with the number of 'Hello's you want in the list.
Another way to do the above is
a = ['Hello'] * amount

How to convert a list made up of one tuple into a two item list?

I have a function that returns a one item list, like so:
list = [('array_1','array_2')]
I want to change this so that the list is instead a two item one, without the parentheses or single quotes:
list = [array_1,array_2]
What would be the best way to go about doing this?
Try this
lists = [('array_1','array_2')]
print([y for x in lists for y in x])
output
['array_1', 'array_2']
Use chain.from_iterable
from itertools import chain
list(chain.from_iterable([('array_1','array_2')]))
['array_1', 'array_2']
You can try this:
lst_tuple = [('array_1', 'array_2')]
lst = []
for i in lst_tuple[0]:
lst.append(i)
By iteratating over the list that contains the tuple and appending each item to a new list, you can get this result:
['array_1', 'array_2']
You could just typecast like this.
list = list([('array_1','array_2')][0])

Quicker way to filter lists based on a check to external variable?

I have a variable = 'P13804'
I also have a list like this:
['1T9G\tA\t2.9\tP11310\t241279.81', '1T9G\tS\t2.9\tP38117\t241279.81', '1T9G\tD\t2.9\tP11310\t241279.81', '1T9G\tB\t2.9\tP11310\t241279.81', '1T9G\tR\t2.9\tP13804\t241279.81', '1T9G\tC\t2.9\tP11310\t241279.81']
You can see, if you split each item in this list up by tab, that the third item in each sub-list of this list is sometimes 'P11310' and sometimes is 'P13804'.
I want to remove the items from the list, where the third item does not match my variable of interest (i.e. in this case P13804).
I know a way to do this is:
var = 'P13804'
new_list = []
for each_item in list1:
split_each_item = each_item.split('\t')
if split_each_item[3] != var:
new_list.append(each_item)
print(new_list)
In reality, the lists are really long, and i have a lot of variables to check. So I'm wondering does someone have a faster way of doing this?
It is generally more efficient in Python to build a list with a comprehension than repeatedly appending to it. So I would use:
var = 'P13804'
new_list = [i for i in list1 if i.split('\t')[2] == var]
According to timeit, it saves more or less 20% of the elapsed time.

How to form a list from queried data?

I have the following code:
s = (f'{item["Num"]}')
my_list = []
my_list.append(s)
print(my_list)
As you can see i want this to form a list that i will then be able to store under my_list, the output from my code looks like this (this is a sample from around 2000 different values)
['01849']
['01852']
['01866']
['01883']
etc...
This is not what i had in mind, i want it to look like this
[`01849', '01852', '01866', '01883']
Has anyone got any suggestions on what i do wrong when i create the list? Thanks
You can fix your problem and represent this compactly with a list comprehension. Assuming your collection is called items, it can be represented as such, without the loop:
my_list = [f'{item["Num"]}' for item in items]
You should first initialize a list here, and then use a for-loop to populate it. So:
my_list = []
for values in range(0, #length of your list):
s = (f'{item["Num"]}')
my_list.append(s)
print(my_list)
Even better, you can also use a list comprehension for this:
my_list = [(f'{item["Num"]}') for values in range(0, #length of your list)]

Is there a dict.update(sub_dict) function for list in Python? (When the list is empty)

Suppose a list in Python -> mylist:
mylist = []
I want to now take input from users and update the values afterward in mylist:
input1 = ["xyz","wyh",34]
print mylist
Output: [["xyz","wyh",34]]
input2 = ["yo","hey",657]
print mylist
output: [["xyz","wyh",34],["yo","hey",657]]
append() only works when list has some values already.
I'd advise you take a look through here to see what exactly you need. It sounds like what you want is list.append() however.
mylist = [["X","Y",12], ["A","B",23]]
mylist.append(["L","M",56])
you can use list.append
mylist.append(["L","M",56])
(or)
mylist+[["L","M",56]]

Categories

Resources