How do I multiply all the elements inside a list by each other?
You're initializing total to 1 every iteration of the loop.
The code should be (if you actually want to do it manually):
a = [2, 3, 4]
total = 1
for i in a:
total *= i
That solves your immediate problem but, if you're using Python 3.8 or higher, this functionality is in the math
library:
import math
a = [2, 3, 4]
total = math.prod(a)
How do I multiply each element in a list by a number?
You can just use a list comprehension:
my_list = [1, 2, 3, 4, 5]
my_new_list = [i * 5 for i in my_list]
>>> print(my_new_list)
[5, 10, 15, 20, 25]
Note that a list comprehension is generally a more efficient way to do a for
loop:
my_new_list = []
for i in my_list:
my_new_list.append(i * 5)
>>> print(my_new_list)
[5, 10, 15, 20, 25]
As an alternative, here is a solution using the popular Pandas package:
import pandas as pd
s = pd.Series(my_list)
>>> s * 5
0 5
1 10
2 15
3 20
4 25
dtype: int64
Or, if you just want the list:
>>> (s * 5).tolist()
[5, 10, 15, 20, 25]
Finally, one could use map
, although this is generally frowned upon.
my_new_list = map(lambda x: x * 5, my_list)
Using map
, however, is generally less efficient. Per a comment from ShadowRanger on a deleted answer to this question:
The reason "no one" uses it is that, in general, it's a performance
pessimization. The only time it's worth consideringmap
in CPython is
if you're using a built-in function implemented in C as the mapping
function; otherwise,map
is going to run equal to or slower than the
more Pythonic listcomp or genexpr (which are also more explicit about
whether they're lazy generators or eagerlist
creators; on Py3, your
code wouldn't work without wrapping themap
call inlist
). If you're
usingmap
with alambda
function, stop, you're doing it wrong.
And another one of his comments posted to this reply:
Please don't teach people to use
map
withlambda
; the instant you
need alambda
, you'd have been better off with a list comprehension
or generator expression. If you're clever, you can makemap
work
withoutlambda
s a lot, e.g. in this case,map((5).__mul__, my_list)
, although in this particular case, thanks to some
optimizations in the byte code interpreter for simpleint
math,[x * 5 for x in my_list]
is faster, as well as being more Pythonic and simpler.
Multiply a list by the elements of other list
Try this:
factors = [1, 2, 3]
values = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
multiply = []
for idx, lst in enumerate(values):
multiply.append([factors[idx] * x for x in lst])
print(multiply)
For a list comprehension version of the above code, see @Hommes answer
How to multiply each elements in a list in Python
You are multiplying strings. Instead multiply integers.
list = ['123', '456', '789']
my_new_list = []
for i in list:
my_new_list.append(int(i)*2)
print (my_new_list)
Or just make every number in list an integer.
Also here is a list comprehension version of your code
list = ['123', '456', '789']
my_new_list = [int(i)*2 for i in list]
List Comprehension you should look into it. What does "list comprehension" mean? How does it work and how can I use it?
How to multiply all integers inside list
Try a list comprehension:
l = [x * 2 for x in l]
This goes through l
, multiplying each element by two.
Of course, there's more than one way to do it. If you're into lambda functions and map
, you can even do
l = map(lambda x: x * 2, l)
to apply the function lambda x: x * 2
to each element in l
. This is equivalent to:
def timesTwo(x):
return x * 2
l = map(timesTwo, l)
Note that map()
returns a map object, not a list, so if you really need a list afterwards you can use the list()
function afterwards, for instance:
l = list(map(timesTwo, l))
Thanks to Minyc510 in the comments for this clarification.
How to perform element-wise multiplication of two lists?
Use a list comprehension mixed with zip()
:.
[a*b for a,b in zip(lista,listb)]
How to multiply all elements in a list with each other in python?
There's a number of issues with your approach. First, you're attempting to iterate over the value len(C)
in your for-loop. Instead, you'd want to use range(len(C))
as this returns a generator of integers from 0 to len(C)
, which you can iterate over. Second, we don't make changes to loop variables in Python because the variable is overwritten at the start of every iteration of the loop so any changes would be ignored. Third, your calculation of answ
will yield errors because you're trying to cast array slices to integers. You're also indexing them backwards. What you want to do is:
sum(a * b for a, b in zip(C, C[1:]))
This will get you a sum of the multiplication of every element in the list with the element in the position to the right of it. This doesn't consider the edge of the list however.
Related Topics
What Are the Python Equivalents to Ruby's Bundler/Perl's Carton
Ruby Equivalent of Python's "Dir"
Does Python Have an "Or Equals" Function Like ||= in Ruby
Running Ruby, Node, Python and Docker on the New Apple Silicon Architecture
List Comprehension in Haskell, Python and Ruby
Differencebetween Ruby and Python Versions Of"Self"
How Can One Find the Unicode Codepoints That a Font Has Glyphs For, on a Debian-Based System
Different Yaml Array Representations
Python Pandas: Convert Rows as Column Headers
Efficient Calculation of Fibonacci Series
What Does "While True" Mean in Python
Is the List of Python Reserved Words and Builtins Available in a Library
Using Headers with the Python Requests Library's Get Method
Python Image Library Fails with Message "Decoder Jpeg Not Available" - Pil