I am trying to find the sum of all numbers in a list but every time I try I get an error that it cannot convert the string to float. Here is what I have so far.
loop = True
float('elec_used')
while (loop):
totalelec = sum('elec_used')
print (totalelec)
loop = False
You need none of your code above. The while loop is unnecessary and it looks like its just exiting the loop in one iteration i.e. its not used correctly. If you're simply summing all the values in the list:
sum([float(i) for i in elec_used])
If this produces errors, please post your elec_used list. It probably contains string values or blank spaces.
'elec_used' is of type string of characters. You can not convert characters to the float. I am not sure why you thought you could do it. However you can convert the numeric string to float by typecasting it. For example:
>>> number_string = '123.5'
>>> float(number_string)
123.5
Now coming to your second part, for calculating the sum of number. Let say your are having the string of multiple numbers. Firstly .split() the list, type-cast each item to float and then calculate the sum(). For example:
>>> number_string = '123.5 345.7 789.4'
>>> splitted_num_string = number_string.split()
>>> number_list = [float(num) for num in splitted_num_string]
>>> sum(number_list)
1258.6
Which could be written in one line using list comprehension as:
>>> sum(float(item) for item in number_string.split())
1258.6
OR, using map() as:
>>> sum(map(float, number_string.split()))
1258.6
Related
With a string of ints:
myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
How could one do an average of the string ints while keeping the string data type ?
Here what I thought in pseudo code:
sum = 0
res = eval(myStr[i] + ' + sum')
avg = res/len(myStr)
If You want to get the average of those integers in that string this is one way:
myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
print(sum(lst := [int(x) for x in myStr.split()]) / len(lst))
basically You get the sum of a list of those integers that are in that string and also use that operator (forgot the name) to assign that list to a variable while simultaneously return that value, then just divide the sum by the length of that list
EDIT1, 2, 3: just remembered, it is called walrus operator, some info can be found here (video by Lex Fridman) and here, as well as other places, also it requires Python version of 3.8 or higher
EDITn: the reason behind the use of the walrus operator is that it allowed to not repeat code in this one-liner, otherwise the list comprehension would have been used twice (in sum and in len) which could affect performance for very large lists (and I wanted it to be a one-liner)
You could split the string, and map it to integers then find the sum of the list. Lastly divide the sum by the length of the split list.
myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
print(sum(map(int,myStr.split()))/len(myStr.split()))
output
2.3932546257161487e+18
Since (the absolute valid) other answers show one-liner solutions I'd like to show the different steps. This might help to understand what's going on.
>>> myStr = '3848202160702781329 2256714569201620911 1074847147244043342'
>>> data = myStr.split()
>>> data
['3848202160702781329', '2256714569201620911', '1074847147244043342']
>>> data = list(map(int, data))
>>> data
[3848202160702781329, 2256714569201620911, 1074847147244043342]
>>> sum(data)
7179763877148445582
>>> sum(data) / len(data)
2.3932546257161487e+18
I am working on an IPV4 breakdown where I have the necessary values in a string variable to represent the binary
(example: 00000000.00000000.00001111.11111111) This is a string
I need a way to turn this string into binary to then properly convert it to it's proper integer value
(in this case 0.0.15.255)
I've seen posts asking about something similar but attempting to apply it to what I'm working on has been unsuccessful
Apologies if this made no sense this is my first time posing a question here
You can achieve this using int() with base argument.
You can know more about int(x,base) - here
Split the string at '.' and store it in a list lst
For every item in lst, convert the item (binary string) to decimal using int(item, base=2) and then convert it into string type.
Join the contents of lst using .
s = '00000000.00000000.00001111.11111111'
lst = s.split('.')
lst = [str(int(i,2)) for i in lst]
print('.'.join(lst))
# Output
0.0.15.255
First split the string on . then convert each to integer equivalent of the binary representation using int builtin passing base=2, then convert to string, finally join them all on .
>>> text = '00000000.00000000.00001111.11111111'
>>> '.'.join(str(int(i, base=2)) for i in text.split('.'))
# output
'0.0.15.255'
You should split the data, convert and combine.
data = "00000000.00000000.00001111.11111111"
data_int = ".".join([str(int(i, 2)) for i in data.split(".")])
print(data_int) # 0.0.15.255
Welcome! Once you have a string like this
s = '00000000.00000000.00101111.11111111'
you may get your integers in one single line:
int_list = list(map(lambda n_str: int(n_str, 2), s.split('.')))
I have the following array:
a =['1','2']
I want to convert this array into the below format :
a=[1,2]
How can I do that?
You can do it like that. You change each element of a (which are strings) in an integer.
a=[int(x) for x in a]
This single inverted comma you are talking about is the difference between str and int. This is pretty basic python stuff.
A string is a characters, displayed with the inverted comma's around it. 'Hello' is a string, but '1' can be a string too.
In you case ['1','2'] is a list of strings, and [1,2] is a list of numbers.
To convert a string to an int, you can do what is called casting. This is converting one type to another (They have to be compatible though.) Casting 'hello' to a number doesn't make sense and won't work.
Casting '1' to a number is possible by calling int('1') which will result in 1
In your case you can cast all elements in you list by calling a = [int(x) for x in a].
For more info on types see this article.
For information on list comprehensions (What I used to change your list) see this article.
I have an array with 4 integer elements for example [1,0,1,0]
I want to convert it into string '1010'
How do that?
I've tried this
b=''.join(str(syndrome_noised.T))
print(b)
but I got '[1,0,1,0]'.
How this string without brackets.
The reason this fails is because you apply str(..) to the matrix. This will generate a single string. This string is however iterable, so you ''.join(..) the characters of that string back together, turning it into the original string again.
What you probably need to do, is convert every single element into a string, and then join these together, like:
b = ''.join(str(x) for x in syndrome_noised.T)
We thus iterate over the elements x in the syndrome_noised.T array, and we each time map it to a str(..), we then join these together.
We can shorten the code a bit, but still have the same semantics, with map:
b = ''.join(map(str, syndrome_noised.T))
syndrome_noised = [1,0,1,0]
''.join(str(x) for x in syndrome_noised)
you could do this by using a for loop like below:
text = str()
for i in array:
text += str(i)
print(text)
and that would return 1010
I am trying to cast a python list into a float.
This is the problem narrowed down:
loss = ['[228.55112815111235]', '[249.41649450361379]']
print(float(loss[0]))
And results in the error:
ValueError: could not convert string to float: '[231.49377550490459]'
Can anyone help me?
Strip the brackets.
float(loss[0].replace('[', '').replace(']', ''))
You can use string slicing if there is always just one element in your string list.
loss = ['[228.55112815111235]', '[249.41649450361379]']
print(float(loss[0][1:-1]))
That is because your float value is encapsulated within brackets. And you'll get ValueError because that is not valid float value. In order to convert it, you have to firstly remove them. For example:
>>> my_val = '[228.55112815111235]'
>>> print float(my_val[1:-1])
228.551128151
In your case, you have to write:
>>> loss = ['[228.55112815111235]', '[249.41649450361379]']
>>> float(loss[0][1:-1])
228.55112815111235
In case you want to convert entire list to list of float, you may use map() function as:
>>> map(lambda x: float(x[1:-1]), loss)
[228.55112815111235, 249.4164945036138]
If you want to convert the list values to floats you can use list comprehension:
loss = [float(loss[i][1:-1]) for i in range(len(loss))]
Then your loss list will look like this:
[228.55112815111235, 249.4164945036138]