Is there any pythonic way to find average of specific tuple elements in array?sum of small double numbers...

How bug prioritization works in agile projects vs non agile

Creating a chemical industry from a medieval tech level without petroleum

What is this word supposed to be?

"The cow" OR "a cow" OR "cows" in this context

"My boss was furious with me and I have been fired" vs. "My boss was furious with me and I was fired"

My bank got bought out, am I now going to have to start filing tax returns in a different state?

A strange hotel

Does a large simulator bay have standard public address announcements?

What was Apollo 13's "Little Jolt" after MECO?

How do I deal with a coworker that keeps asking to make small superficial changes to a report, and it is seriously triggering my anxiety?

Why didn't the Space Shuttle bounce back into space as many times as possible so as to lose a lot of kinetic energy up there?

Help with my training data

Prove that the countable union of countable sets is also countable

Why must Chinese maps be obfuscated?

Does the damage from the Absorb Elements spell apply to your next attack, or to your first attack on your next turn?

Combinatorics problem, right solution?

A ​Note ​on ​N!

Should the Product Owner dictate what info the UI needs to display?

Where was the County of Thurn und Taxis located?

Apply a different color ramp to subset of categorized symbols in QGIS?

Retract an already submitted recommendation letter (written for an undergrad student)

Island of Knights, Knaves and Spies

How exactly does Hawking radiation decrease the mass of black holes?

As an international instructor, should I openly talk about my accent?



Is there any pythonic way to find average of specific tuple elements in array?


sum of small double numbers c++Is there a way to run Python on Android?Finding the index of an item given a list containing it in PythonPHP: Delete an element from an arrayWhat's the simplest way to print a Java array?How to insert an item into an array at a specific index (JavaScript)?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?What are “named tuples” in Python?How do I remove a particular element from an array in JavaScript?How can I add new array elements at the beginning of an array in Javascript?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







16















I want to write this code as pythonic. My real array much bigger than this example.



( 5+10+20+3+2 ) / 5




print(np.mean(array,key=lambda x:x[1]))
TypeError: mean() got an unexpected keyword argument 'key'




array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]

sum = 0
for i in range(len(array)):
sum = sum + array[i][1]

average = sum / len(array)
print(average)

import numpy as np
print(np.mean(array,key=lambda x:x[1]))


How can avoid this?
I want to use second example.










share|improve this question

























  • What version of Python are you using?

    – Peter Wood
    16 hours ago






  • 1





    @PeterWood python 3.7

    – Şevval Kahraman
    15 hours ago


















16















I want to write this code as pythonic. My real array much bigger than this example.



( 5+10+20+3+2 ) / 5




print(np.mean(array,key=lambda x:x[1]))
TypeError: mean() got an unexpected keyword argument 'key'




array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]

sum = 0
for i in range(len(array)):
sum = sum + array[i][1]

average = sum / len(array)
print(average)

import numpy as np
print(np.mean(array,key=lambda x:x[1]))


How can avoid this?
I want to use second example.










share|improve this question

























  • What version of Python are you using?

    – Peter Wood
    16 hours ago






  • 1





    @PeterWood python 3.7

    – Şevval Kahraman
    15 hours ago














16












16








16


1






I want to write this code as pythonic. My real array much bigger than this example.



( 5+10+20+3+2 ) / 5




print(np.mean(array,key=lambda x:x[1]))
TypeError: mean() got an unexpected keyword argument 'key'




array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]

sum = 0
for i in range(len(array)):
sum = sum + array[i][1]

average = sum / len(array)
print(average)

import numpy as np
print(np.mean(array,key=lambda x:x[1]))


How can avoid this?
I want to use second example.










share|improve this question
















I want to write this code as pythonic. My real array much bigger than this example.



( 5+10+20+3+2 ) / 5




print(np.mean(array,key=lambda x:x[1]))
TypeError: mean() got an unexpected keyword argument 'key'




array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]

sum = 0
for i in range(len(array)):
sum = sum + array[i][1]

average = sum / len(array)
print(average)

import numpy as np
print(np.mean(array,key=lambda x:x[1]))


How can avoid this?
I want to use second example.







python arrays python-3.x tuples average






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 14 hours ago









ruohola

1,940420




1,940420










asked 16 hours ago









Şevval KahramanŞevval Kahraman

1327




1327













  • What version of Python are you using?

    – Peter Wood
    16 hours ago






  • 1





    @PeterWood python 3.7

    – Şevval Kahraman
    15 hours ago



















  • What version of Python are you using?

    – Peter Wood
    16 hours ago






  • 1





    @PeterWood python 3.7

    – Şevval Kahraman
    15 hours ago

















What version of Python are you using?

– Peter Wood
16 hours ago





What version of Python are you using?

– Peter Wood
16 hours ago




1




1





@PeterWood python 3.7

– Şevval Kahraman
15 hours ago





@PeterWood python 3.7

– Şevval Kahraman
15 hours ago












8 Answers
8






active

oldest

votes


















22














If you are using Python 3.4 or above, you could use the statistics module:



from statistics import mean

average = mean(value[1] for value in array)


Or if you're using a version of Python older than 3.4:



average = sum(value[1] for value in array) / len(array)


If you're using Python 2, and you're summing integers, we will have integer division, which will truncate the result, e.g:



>>> 25 / 4
6

>>> 25 / float(4)
6.25


To ensure we don't have integer division we could set the starting value of sum to be the float value 0.0. However, this also means we have to make the loop over the values in the array into a comprehension expression, otherwise it's a syntax error, and it's less pretty, as noted in the comments:



average = sum((value[1] for value in array), 0.0) / len(array)


It's probably best to use fsum from the math module which will return a float:



from math import fsum

average = fsum(value[1] for value in array) / len(array)





share|improve this answer


























  • I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

    – Peter Wood
    15 hours ago






  • 4





    I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

    – ruohola
    14 hours ago













  • @ruohola I think using fsum is probably best for Python 2.

    – Peter Wood
    14 hours ago











  • Can't you from __future__ import division?

    – DanielSank
    2 hours ago













  • @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

    – Peter Wood
    2 hours ago



















4














If you do want to use numpy, cast it to a numpy.array and select the axis you want using numpy indexing:



import numpy as np

array = np.array([('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)])
print(array[:,1].astype(float).mean())
# 8.0


The cast to a numeric type is needed because the original array contains both strings and numbers and is therefore of type object. In this case you could use float or int, it makes no difference.






share|improve this answer

































    3














    You can simply use:



    print(sum(tup[1] for tup in array) / len(array))


    Or for Python 2:



    print(sum(tup[1] for tup in array) / float(len(array)))


    Or little bit more concisely for Python 2:



    from math import fsum

    print(fsum(tup[1] for tup in array) / len(array))





    share|improve this answer


























    • it gives this error : 'int' object is not callable

      – Şevval Kahraman
      16 hours ago











    • @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

      – ruohola
      15 hours ago













    • @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

      – Peter Wood
      15 hours ago











    • @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

      – ruohola
      14 hours ago













    • As it's python 3, just use statistics.mean.

      – Peter Wood
      12 hours ago



















    2














    With pure Python:



    from operator import itemgetter

    acc = 0
    count = 0

    for value in map(itemgetter(1), array):
    acc += value
    count += 1

    mean = acc / count


    An iterative approach can be preferable if your data cannot fit in memory as a list (since you said it was big). If it can, prefer a declarative approach:



    data = [sub[1] for sub in array]
    mean = sum(data) / len(data)


    If you are open to using numpy, I find this cleaner:



    a = np.array(array)

    mean = a[:, 1].astype(int).mean()





    share|improve this answer

































      1














      you can use map instead of list comprehension



      sum(map(lambda x:int(x[1]), array)) / len(array)


      or functools.reduce (if you use Python2.X just reduce not functools.reduce)



      import functools
      functools.reduce(lambda acc, y: acc + y[1], array, 0) / len(array)





      share|improve this answer


























      • first one gives this error : 'int' object is not callable

        – Şevval Kahraman
        15 hours ago











      • @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

        – JGreenwell
        11 hours ago











      • x[1] is already an integer, why do you need to call int()?

        – Barmar
        6 hours ago











      • Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

        – Mateen Ulhaq
        52 mins ago













      • Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

        – Mateen Ulhaq
        51 mins ago





















      1














      If you're open to more golf-like solutions, you can transpose your array with vanilla python, get a list of just the numbers, and calculate the mean with



      sum(zip(*array)[1])/len(array)





      share|improve this answer








      New contributor




      Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




























        0














        You could use map:



        np.mean(list(map(lambda x: x[1], array)))






        share|improve this answer































          0














          Just find the average using sum and number of elements of the list.



          array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]
          avg = float(sum(value[1] for value in array)) / float(len(array))
          print(avg)
          #8.0





          share|improve this answer


























          • Fixed it, Thank you for the suggestion @PeterWood

            – Devesh Kumar Singh
            16 hours ago












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55843611%2fis-there-any-pythonic-way-to-find-average-of-specific-tuple-elements-in-array%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          8 Answers
          8






          active

          oldest

          votes








          8 Answers
          8






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          22














          If you are using Python 3.4 or above, you could use the statistics module:



          from statistics import mean

          average = mean(value[1] for value in array)


          Or if you're using a version of Python older than 3.4:



          average = sum(value[1] for value in array) / len(array)


          If you're using Python 2, and you're summing integers, we will have integer division, which will truncate the result, e.g:



          >>> 25 / 4
          6

          >>> 25 / float(4)
          6.25


          To ensure we don't have integer division we could set the starting value of sum to be the float value 0.0. However, this also means we have to make the loop over the values in the array into a comprehension expression, otherwise it's a syntax error, and it's less pretty, as noted in the comments:



          average = sum((value[1] for value in array), 0.0) / len(array)


          It's probably best to use fsum from the math module which will return a float:



          from math import fsum

          average = fsum(value[1] for value in array) / len(array)





          share|improve this answer


























          • I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

            – Peter Wood
            15 hours ago






          • 4





            I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

            – ruohola
            14 hours ago













          • @ruohola I think using fsum is probably best for Python 2.

            – Peter Wood
            14 hours ago











          • Can't you from __future__ import division?

            – DanielSank
            2 hours ago













          • @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

            – Peter Wood
            2 hours ago
















          22














          If you are using Python 3.4 or above, you could use the statistics module:



          from statistics import mean

          average = mean(value[1] for value in array)


          Or if you're using a version of Python older than 3.4:



          average = sum(value[1] for value in array) / len(array)


          If you're using Python 2, and you're summing integers, we will have integer division, which will truncate the result, e.g:



          >>> 25 / 4
          6

          >>> 25 / float(4)
          6.25


          To ensure we don't have integer division we could set the starting value of sum to be the float value 0.0. However, this also means we have to make the loop over the values in the array into a comprehension expression, otherwise it's a syntax error, and it's less pretty, as noted in the comments:



          average = sum((value[1] for value in array), 0.0) / len(array)


          It's probably best to use fsum from the math module which will return a float:



          from math import fsum

          average = fsum(value[1] for value in array) / len(array)





          share|improve this answer


























          • I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

            – Peter Wood
            15 hours ago






          • 4





            I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

            – ruohola
            14 hours ago













          • @ruohola I think using fsum is probably best for Python 2.

            – Peter Wood
            14 hours ago











          • Can't you from __future__ import division?

            – DanielSank
            2 hours ago













          • @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

            – Peter Wood
            2 hours ago














          22












          22








          22







          If you are using Python 3.4 or above, you could use the statistics module:



          from statistics import mean

          average = mean(value[1] for value in array)


          Or if you're using a version of Python older than 3.4:



          average = sum(value[1] for value in array) / len(array)


          If you're using Python 2, and you're summing integers, we will have integer division, which will truncate the result, e.g:



          >>> 25 / 4
          6

          >>> 25 / float(4)
          6.25


          To ensure we don't have integer division we could set the starting value of sum to be the float value 0.0. However, this also means we have to make the loop over the values in the array into a comprehension expression, otherwise it's a syntax error, and it's less pretty, as noted in the comments:



          average = sum((value[1] for value in array), 0.0) / len(array)


          It's probably best to use fsum from the math module which will return a float:



          from math import fsum

          average = fsum(value[1] for value in array) / len(array)





          share|improve this answer















          If you are using Python 3.4 or above, you could use the statistics module:



          from statistics import mean

          average = mean(value[1] for value in array)


          Or if you're using a version of Python older than 3.4:



          average = sum(value[1] for value in array) / len(array)


          If you're using Python 2, and you're summing integers, we will have integer division, which will truncate the result, e.g:



          >>> 25 / 4
          6

          >>> 25 / float(4)
          6.25


          To ensure we don't have integer division we could set the starting value of sum to be the float value 0.0. However, this also means we have to make the loop over the values in the array into a comprehension expression, otherwise it's a syntax error, and it's less pretty, as noted in the comments:



          average = sum((value[1] for value in array), 0.0) / len(array)


          It's probably best to use fsum from the math module which will return a float:



          from math import fsum

          average = fsum(value[1] for value in array) / len(array)






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 14 hours ago

























          answered 16 hours ago









          Peter WoodPeter Wood

          16.9k33877




          16.9k33877













          • I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

            – Peter Wood
            15 hours ago






          • 4





            I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

            – ruohola
            14 hours ago













          • @ruohola I think using fsum is probably best for Python 2.

            – Peter Wood
            14 hours ago











          • Can't you from __future__ import division?

            – DanielSank
            2 hours ago













          • @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

            – Peter Wood
            2 hours ago



















          • I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

            – Peter Wood
            15 hours ago






          • 4





            I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

            – ruohola
            14 hours ago













          • @ruohola I think using fsum is probably best for Python 2.

            – Peter Wood
            14 hours ago











          • Can't you from __future__ import division?

            – DanielSank
            2 hours ago













          • @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

            – Peter Wood
            2 hours ago

















          I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

          – Peter Wood
          15 hours ago





          I realised there are better ways to do the Python 2 code. sum takes an argument for the starting value. If you pass 0.0 to it, then the numerator will always be floating point, nothing to worry about. Also, there is a function in the math module, fsum.

          – Peter Wood
          15 hours ago




          4




          4





          I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

          – ruohola
          14 hours ago







          I would say the float casting way is little bit more self-explanatory than passing a weird 0.0 value argument for the sum.

          – ruohola
          14 hours ago















          @ruohola I think using fsum is probably best for Python 2.

          – Peter Wood
          14 hours ago





          @ruohola I think using fsum is probably best for Python 2.

          – Peter Wood
          14 hours ago













          Can't you from __future__ import division?

          – DanielSank
          2 hours ago







          Can't you from __future__ import division?

          – DanielSank
          2 hours ago















          @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

          – Peter Wood
          2 hours ago





          @DanielSank yes, that's another option. Another advantage of using fsum, if you're summing floats, is it keeps track of partial sums, which compensates for lack of precision in the floating point representation. So, if we stay using fsum we don't need to think about integer division at all, and are generally the better solution too. See my answer about Kahan Summation in c++.

          – Peter Wood
          2 hours ago













          4














          If you do want to use numpy, cast it to a numpy.array and select the axis you want using numpy indexing:



          import numpy as np

          array = np.array([('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)])
          print(array[:,1].astype(float).mean())
          # 8.0


          The cast to a numeric type is needed because the original array contains both strings and numbers and is therefore of type object. In this case you could use float or int, it makes no difference.






          share|improve this answer






























            4














            If you do want to use numpy, cast it to a numpy.array and select the axis you want using numpy indexing:



            import numpy as np

            array = np.array([('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)])
            print(array[:,1].astype(float).mean())
            # 8.0


            The cast to a numeric type is needed because the original array contains both strings and numbers and is therefore of type object. In this case you could use float or int, it makes no difference.






            share|improve this answer




























              4












              4








              4







              If you do want to use numpy, cast it to a numpy.array and select the axis you want using numpy indexing:



              import numpy as np

              array = np.array([('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)])
              print(array[:,1].astype(float).mean())
              # 8.0


              The cast to a numeric type is needed because the original array contains both strings and numbers and is therefore of type object. In this case you could use float or int, it makes no difference.






              share|improve this answer















              If you do want to use numpy, cast it to a numpy.array and select the axis you want using numpy indexing:



              import numpy as np

              array = np.array([('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)])
              print(array[:,1].astype(float).mean())
              # 8.0


              The cast to a numeric type is needed because the original array contains both strings and numbers and is therefore of type object. In this case you could use float or int, it makes no difference.







              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited 13 hours ago

























              answered 13 hours ago









              GraipherGraipher

              4,7191634




              4,7191634























                  3














                  You can simply use:



                  print(sum(tup[1] for tup in array) / len(array))


                  Or for Python 2:



                  print(sum(tup[1] for tup in array) / float(len(array)))


                  Or little bit more concisely for Python 2:



                  from math import fsum

                  print(fsum(tup[1] for tup in array) / len(array))





                  share|improve this answer


























                  • it gives this error : 'int' object is not callable

                    – Şevval Kahraman
                    16 hours ago











                  • @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

                    – ruohola
                    15 hours ago













                  • @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

                    – Peter Wood
                    15 hours ago











                  • @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

                    – ruohola
                    14 hours ago













                  • As it's python 3, just use statistics.mean.

                    – Peter Wood
                    12 hours ago
















                  3














                  You can simply use:



                  print(sum(tup[1] for tup in array) / len(array))


                  Or for Python 2:



                  print(sum(tup[1] for tup in array) / float(len(array)))


                  Or little bit more concisely for Python 2:



                  from math import fsum

                  print(fsum(tup[1] for tup in array) / len(array))





                  share|improve this answer


























                  • it gives this error : 'int' object is not callable

                    – Şevval Kahraman
                    16 hours ago











                  • @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

                    – ruohola
                    15 hours ago













                  • @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

                    – Peter Wood
                    15 hours ago











                  • @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

                    – ruohola
                    14 hours ago













                  • As it's python 3, just use statistics.mean.

                    – Peter Wood
                    12 hours ago














                  3












                  3








                  3







                  You can simply use:



                  print(sum(tup[1] for tup in array) / len(array))


                  Or for Python 2:



                  print(sum(tup[1] for tup in array) / float(len(array)))


                  Or little bit more concisely for Python 2:



                  from math import fsum

                  print(fsum(tup[1] for tup in array) / len(array))





                  share|improve this answer















                  You can simply use:



                  print(sum(tup[1] for tup in array) / len(array))


                  Or for Python 2:



                  print(sum(tup[1] for tup in array) / float(len(array)))


                  Or little bit more concisely for Python 2:



                  from math import fsum

                  print(fsum(tup[1] for tup in array) / len(array))






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 14 hours ago

























                  answered 16 hours ago









                  ruoholaruohola

                  1,940420




                  1,940420













                  • it gives this error : 'int' object is not callable

                    – Şevval Kahraman
                    16 hours ago











                  • @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

                    – ruohola
                    15 hours ago













                  • @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

                    – Peter Wood
                    15 hours ago











                  • @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

                    – ruohola
                    14 hours ago













                  • As it's python 3, just use statistics.mean.

                    – Peter Wood
                    12 hours ago



















                  • it gives this error : 'int' object is not callable

                    – Şevval Kahraman
                    16 hours ago











                  • @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

                    – ruohola
                    15 hours ago













                  • @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

                    – Peter Wood
                    15 hours ago











                  • @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

                    – ruohola
                    14 hours ago













                  • As it's python 3, just use statistics.mean.

                    – Peter Wood
                    12 hours ago

















                  it gives this error : 'int' object is not callable

                  – Şevval Kahraman
                  16 hours ago





                  it gives this error : 'int' object is not callable

                  – Şevval Kahraman
                  16 hours ago













                  @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

                  – ruohola
                  15 hours ago







                  @ŞevvalKahraman it gives no errors for me with your example array, you probably have a typo somewhere.

                  – ruohola
                  15 hours ago















                  @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

                  – Peter Wood
                  15 hours ago





                  @ruohola The reason it works for the example is it's 40 / 5 which gives 8 with no remainder. In Python 2, with different numbers, it could truncate the answer.

                  – Peter Wood
                  15 hours ago













                  @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

                  – ruohola
                  14 hours ago







                  @PeterWood it will not truncate anything if you use the float(len(array)) casting when using Python 2. Anyways it shouldn't even matter since this question was for Python 3.x.

                  – ruohola
                  14 hours ago















                  As it's python 3, just use statistics.mean.

                  – Peter Wood
                  12 hours ago





                  As it's python 3, just use statistics.mean.

                  – Peter Wood
                  12 hours ago











                  2














                  With pure Python:



                  from operator import itemgetter

                  acc = 0
                  count = 0

                  for value in map(itemgetter(1), array):
                  acc += value
                  count += 1

                  mean = acc / count


                  An iterative approach can be preferable if your data cannot fit in memory as a list (since you said it was big). If it can, prefer a declarative approach:



                  data = [sub[1] for sub in array]
                  mean = sum(data) / len(data)


                  If you are open to using numpy, I find this cleaner:



                  a = np.array(array)

                  mean = a[:, 1].astype(int).mean()





                  share|improve this answer






























                    2














                    With pure Python:



                    from operator import itemgetter

                    acc = 0
                    count = 0

                    for value in map(itemgetter(1), array):
                    acc += value
                    count += 1

                    mean = acc / count


                    An iterative approach can be preferable if your data cannot fit in memory as a list (since you said it was big). If it can, prefer a declarative approach:



                    data = [sub[1] for sub in array]
                    mean = sum(data) / len(data)


                    If you are open to using numpy, I find this cleaner:



                    a = np.array(array)

                    mean = a[:, 1].astype(int).mean()





                    share|improve this answer




























                      2












                      2








                      2







                      With pure Python:



                      from operator import itemgetter

                      acc = 0
                      count = 0

                      for value in map(itemgetter(1), array):
                      acc += value
                      count += 1

                      mean = acc / count


                      An iterative approach can be preferable if your data cannot fit in memory as a list (since you said it was big). If it can, prefer a declarative approach:



                      data = [sub[1] for sub in array]
                      mean = sum(data) / len(data)


                      If you are open to using numpy, I find this cleaner:



                      a = np.array(array)

                      mean = a[:, 1].astype(int).mean()





                      share|improve this answer















                      With pure Python:



                      from operator import itemgetter

                      acc = 0
                      count = 0

                      for value in map(itemgetter(1), array):
                      acc += value
                      count += 1

                      mean = acc / count


                      An iterative approach can be preferable if your data cannot fit in memory as a list (since you said it was big). If it can, prefer a declarative approach:



                      data = [sub[1] for sub in array]
                      mean = sum(data) / len(data)


                      If you are open to using numpy, I find this cleaner:



                      a = np.array(array)

                      mean = a[:, 1].astype(int).mean()






                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited 16 hours ago

























                      answered 16 hours ago









                      gmdsgmds

                      8,093932




                      8,093932























                          1














                          you can use map instead of list comprehension



                          sum(map(lambda x:int(x[1]), array)) / len(array)


                          or functools.reduce (if you use Python2.X just reduce not functools.reduce)



                          import functools
                          functools.reduce(lambda acc, y: acc + y[1], array, 0) / len(array)





                          share|improve this answer


























                          • first one gives this error : 'int' object is not callable

                            – Şevval Kahraman
                            15 hours ago











                          • @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

                            – JGreenwell
                            11 hours ago











                          • x[1] is already an integer, why do you need to call int()?

                            – Barmar
                            6 hours ago











                          • Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

                            – Mateen Ulhaq
                            52 mins ago













                          • Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

                            – Mateen Ulhaq
                            51 mins ago


















                          1














                          you can use map instead of list comprehension



                          sum(map(lambda x:int(x[1]), array)) / len(array)


                          or functools.reduce (if you use Python2.X just reduce not functools.reduce)



                          import functools
                          functools.reduce(lambda acc, y: acc + y[1], array, 0) / len(array)





                          share|improve this answer


























                          • first one gives this error : 'int' object is not callable

                            – Şevval Kahraman
                            15 hours ago











                          • @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

                            – JGreenwell
                            11 hours ago











                          • x[1] is already an integer, why do you need to call int()?

                            – Barmar
                            6 hours ago











                          • Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

                            – Mateen Ulhaq
                            52 mins ago













                          • Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

                            – Mateen Ulhaq
                            51 mins ago
















                          1












                          1








                          1







                          you can use map instead of list comprehension



                          sum(map(lambda x:int(x[1]), array)) / len(array)


                          or functools.reduce (if you use Python2.X just reduce not functools.reduce)



                          import functools
                          functools.reduce(lambda acc, y: acc + y[1], array, 0) / len(array)





                          share|improve this answer















                          you can use map instead of list comprehension



                          sum(map(lambda x:int(x[1]), array)) / len(array)


                          or functools.reduce (if you use Python2.X just reduce not functools.reduce)



                          import functools
                          functools.reduce(lambda acc, y: acc + y[1], array, 0) / len(array)






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited 16 hours ago

























                          answered 16 hours ago









                          minjiminji

                          167110




                          167110













                          • first one gives this error : 'int' object is not callable

                            – Şevval Kahraman
                            15 hours ago











                          • @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

                            – JGreenwell
                            11 hours ago











                          • x[1] is already an integer, why do you need to call int()?

                            – Barmar
                            6 hours ago











                          • Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

                            – Mateen Ulhaq
                            52 mins ago













                          • Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

                            – Mateen Ulhaq
                            51 mins ago





















                          • first one gives this error : 'int' object is not callable

                            – Şevval Kahraman
                            15 hours ago











                          • @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

                            – JGreenwell
                            11 hours ago











                          • x[1] is already an integer, why do you need to call int()?

                            – Barmar
                            6 hours ago











                          • Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

                            – Mateen Ulhaq
                            52 mins ago













                          • Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

                            – Mateen Ulhaq
                            51 mins ago



















                          first one gives this error : 'int' object is not callable

                          – Şevval Kahraman
                          15 hours ago





                          first one gives this error : 'int' object is not callable

                          – Şevval Kahraman
                          15 hours ago













                          @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

                          – JGreenwell
                          11 hours ago





                          @ŞevvalKahraman if array is defined as shown in your question - the first one give 8.0 (tested & verified on same version). So either the array your using has a different value somewhere or you made a typo

                          – JGreenwell
                          11 hours ago













                          x[1] is already an integer, why do you need to call int()?

                          – Barmar
                          6 hours ago





                          x[1] is already an integer, why do you need to call int()?

                          – Barmar
                          6 hours ago













                          Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

                          – Mateen Ulhaq
                          52 mins ago







                          Using a lambda is 30% slower than a generator comprehension. But if you prefer map, I recommend using operator.itemgetter(1) instead of the lambda.

                          – Mateen Ulhaq
                          52 mins ago















                          Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

                          – Mateen Ulhaq
                          51 mins ago







                          Similarly, functools.reduce is 72% slower than a generator comprehension and sum.

                          – Mateen Ulhaq
                          51 mins ago













                          1














                          If you're open to more golf-like solutions, you can transpose your array with vanilla python, get a list of just the numbers, and calculate the mean with



                          sum(zip(*array)[1])/len(array)





                          share|improve this answer








                          New contributor




                          Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                          Check out our Code of Conduct.

























                            1














                            If you're open to more golf-like solutions, you can transpose your array with vanilla python, get a list of just the numbers, and calculate the mean with



                            sum(zip(*array)[1])/len(array)





                            share|improve this answer








                            New contributor




                            Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                            Check out our Code of Conduct.























                              1












                              1








                              1







                              If you're open to more golf-like solutions, you can transpose your array with vanilla python, get a list of just the numbers, and calculate the mean with



                              sum(zip(*array)[1])/len(array)





                              share|improve this answer








                              New contributor




                              Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.










                              If you're open to more golf-like solutions, you can transpose your array with vanilla python, get a list of just the numbers, and calculate the mean with



                              sum(zip(*array)[1])/len(array)






                              share|improve this answer








                              New contributor




                              Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.









                              share|improve this answer



                              share|improve this answer






                              New contributor




                              Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.









                              answered 2 hours ago









                              Nick AminNick Amin

                              111




                              111




                              New contributor




                              Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.





                              New contributor





                              Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.






                              Nick Amin is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                              Check out our Code of Conduct.























                                  0














                                  You could use map:



                                  np.mean(list(map(lambda x: x[1], array)))






                                  share|improve this answer




























                                    0














                                    You could use map:



                                    np.mean(list(map(lambda x: x[1], array)))






                                    share|improve this answer


























                                      0












                                      0








                                      0







                                      You could use map:



                                      np.mean(list(map(lambda x: x[1], array)))






                                      share|improve this answer













                                      You could use map:



                                      np.mean(list(map(lambda x: x[1], array)))







                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered 16 hours ago









                                      pdpinopdpino

                                      1647




                                      1647























                                          0














                                          Just find the average using sum and number of elements of the list.



                                          array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]
                                          avg = float(sum(value[1] for value in array)) / float(len(array))
                                          print(avg)
                                          #8.0





                                          share|improve this answer


























                                          • Fixed it, Thank you for the suggestion @PeterWood

                                            – Devesh Kumar Singh
                                            16 hours ago
















                                          0














                                          Just find the average using sum and number of elements of the list.



                                          array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]
                                          avg = float(sum(value[1] for value in array)) / float(len(array))
                                          print(avg)
                                          #8.0





                                          share|improve this answer


























                                          • Fixed it, Thank you for the suggestion @PeterWood

                                            – Devesh Kumar Singh
                                            16 hours ago














                                          0












                                          0








                                          0







                                          Just find the average using sum and number of elements of the list.



                                          array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]
                                          avg = float(sum(value[1] for value in array)) / float(len(array))
                                          print(avg)
                                          #8.0





                                          share|improve this answer















                                          Just find the average using sum and number of elements of the list.



                                          array = [('a', 5) , ('b', 10), ('c', 20), ('d', 3), ('e', 2)]
                                          avg = float(sum(value[1] for value in array)) / float(len(array))
                                          print(avg)
                                          #8.0






                                          share|improve this answer














                                          share|improve this answer



                                          share|improve this answer








                                          edited 16 hours ago

























                                          answered 16 hours ago









                                          Devesh Kumar SinghDevesh Kumar Singh

                                          3,6401425




                                          3,6401425













                                          • Fixed it, Thank you for the suggestion @PeterWood

                                            – Devesh Kumar Singh
                                            16 hours ago



















                                          • Fixed it, Thank you for the suggestion @PeterWood

                                            – Devesh Kumar Singh
                                            16 hours ago

















                                          Fixed it, Thank you for the suggestion @PeterWood

                                          – Devesh Kumar Singh
                                          16 hours ago





                                          Fixed it, Thank you for the suggestion @PeterWood

                                          – Devesh Kumar Singh
                                          16 hours ago


















                                          draft saved

                                          draft discarded




















































                                          Thanks for contributing an answer to Stack Overflow!


                                          • Please be sure to answer the question. Provide details and share your research!

                                          But avoid



                                          • Asking for help, clarification, or responding to other answers.

                                          • Making statements based on opinion; back them up with references or personal experience.


                                          To learn more, see our tips on writing great answers.




                                          draft saved


                                          draft discarded














                                          StackExchange.ready(
                                          function () {
                                          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55843611%2fis-there-any-pythonic-way-to-find-average-of-specific-tuple-elements-in-array%23new-answer', 'question_page');
                                          }
                                          );

                                          Post as a guest















                                          Required, but never shown





















































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown

































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown







                                          Popular posts from this blog

                                          List of shipwrecks in 1808...

                                          Is there a lightweight tool to crop images quickly?Cropping Images using Command Line Tools OnlyHow to crop...

                                          Unit packagekit.service is masked Announcing the arrival of Valued Associate #679: Cesar...