Skip to content
    geeksforgeeks
    • Interview Prep
      • DSA
      • Interview Corner
      • Aptitude & Reasoning
      • Practice Coding Problems
      • All Courses
    • Tutorials
      • Python
      • Java
      • ML & Data Science
      • Programming Languages
      • Web Development
      • CS Subjects
      • DevOps
      • Software and Tools
      • School Learning
    • Tracks
      • Languages
        • Python
        • C
        • C++
        • Java
        • Advanced Java
        • SQL
        • JavaScript
        • C#
      • Interview Preparation
        • GfG 160
        • GfG 360
        • System Design
        • Core Subjects
        • Interview Questions
        • Interview Puzzles
        • Aptitude and Reasoning
        • Product Management
        • Computer Organisation and Architecture
      • Data Science
        • Python
        • Data Analytics
        • Complete Data Science
        • Gen AI
        • Agentic AI
      • Dev Skills
        • Full-Stack Web Dev
        • DevOps
        • Software Testing
        • CyberSecurity
        • NextJS
        • Git
      • Tools
        • Computer Fundamentals
        • AI Tools
        • MS Excel & Google Sheets
        • MS Word & Google Docs
      • Maths
        • Maths For Computer Science
        • Engineering Mathematics
        • School Maths
    • Python Tutorial
    • Data Types
    • Interview Questions
    • Examples
    • Quizzes
    • DSA Python
    • Data Science
    • NumPy
    • Pandas
    • Practice
    • Django
    • Flask
    • Projects
    Open In App

    Python - Sort Strings by Case difference

    Last Updated : 23 Jul, 2025
    Comments
    Improve
    Suggest changes
    1 Likes
    Like
    Report
    See More

    Given Strings List, the task is to write a Python program to perform sort on basis of difference of cases i.e count of lower case and upper case.

    Examples:

    Input : test_list = ["GFG", "GeeKs", "best", "FOr", "alL", "GEEKS"] 
    Output : ['GeeKs', 'FOr', 'alL', 'GFG', 'best', 'GEEKS'] 
    Explanation : ees(3) - GK(2) = 1, hence at 1st index, others are ordered accordingly.
     

    Input : test_list = ["GFG", "GeeKs", "best"] 
    Output : ['GeeKs', 'GFG', 'best'] 
    Explanation : ees(3) - GK(2) = 1, hence at 1st index, others are ordered accordingly. 

    Method #1 : Using sort() + islower() + isupper() + abs()

    In this inplace sorting is performed using sort(), and islower() and isupper() is used to check for cases and count. Then abs() is used to get the absolute difference for providing parameters to perform sort over.

    Python3
    # Python3 code to demonstrate working of
    # Sort Strings by Case difference
    # Using sort() + islower() + isupper() + abs()
    
    
    def get_case_diff(string):
    
        # getting case count and difference
        lower_cnt = len([ele for ele in string if ele.islower()])
        upper_cnt = len([ele for ele in string if ele.isupper()])
        return abs(lower_cnt - upper_cnt)
    
    
    # initializing Matrix
    test_list = ["GFG", "GeeKs", "best", "FOr", "alL", "GEEKS"]
    
    # printing original list
    print("The original list is : " + str(test_list))
    
    # inplace sort using sort()
    test_list.sort(key=get_case_diff)
    
    # printing result
    print("Sorted Strings by case difference : " + str(test_list))
    

    Output:

    The original list is : ['GFG', 'GeeKs', 'best', 'FOr', 'alL', 'GEEKS'] Sorted Strings by case difference : ['GeeKs', 'FOr', 'alL', 'GFG', 'best', 'GEEKS']

    Time Complexity: O(nlogn)
    Auxiliary Space: O(1)

    Method #2 : Using sorted() + lambda + islower() + len() + isupper() + abs()

    Similar to above method, difference being way of sorting used, sorted() and lambda used as a way of injecting functionality.

    Python3
    # Python3 code to demonstrate working of
    # Python3 code to demonstrate working of
    # Sort Strings by Case difference
    # Using sorted() + lambda + islower() + len() + isupper() + abs()
    
    # initializing Matrix
    test_list = ["GFG", "GeeKs", "best", "FOr", "alL", "GEEKS"]
                
    # printing original list
    print("The original list is : " + str(test_list))
    
    # sorting using sorted()
    # lambda function to inject functionality
    res = sorted(test_list, key = lambda string : \
            abs(len([ele for ele in string if ele.islower()]) - \
            len([ele for ele in string if ele.isupper()])))
    
    # printing result
    print("Sorted Strings by case difference : " + str(res))
    

    Output:

    The original list is : ['GFG', 'GeeKs', 'best', 'FOr', 'alL', 'GEEKS'] Sorted Strings by case difference : ['GeeKs', 'FOr', 'alL', 'GFG', 'best', 'GEEKS']

    The time and space complexity for all the methods are the same:

    Time Complexity: O(n*logn)

    Space Complexity: O(n)

    Method #3 :  Using sum + lambda

    Here, we've created a get_case_difference function which takes a string as an argument and returns the absolute difference of count of lower case characters and upper case characters. In the sorted function, we pass test_list as the list to be sorted and the key argument is set to the get_case_difference function applied to each string in the list using lambda function.

    Python3
    def get_case_difference(string):
        return abs(sum(1 for c in string if c.islower()) - sum(1 for c in string if c.isupper()))
    
    test_list = ["GFG", "GeeKs", "best", "FOr", "alL", "GEEKS"]
    print("The original list is : ", test_list)
    
    # Using map function to calculate case difference
    result = sorted(test_list, key=lambda x: get_case_difference(x))
    
    # Printing result
    print("Sorted Strings by case difference : ", result)
    

    Output
    The original list is :  ['GFG', 'GeeKs', 'best', 'FOr', 'alL', 'GEEKS']
    Sorted Strings by case difference :  ['GeeKs', 'FOr', 'alL', 'GFG', 'best', 'GEEKS']

    Time complexity: O(n log n)

    Auxiliary Space: O(n)

    Method #4: Using reduce():

    Algorithm:

    1. Define a function get_case_difference that takes a string as input and returns the absolute value of the difference between the number of lowercase and uppercase letters in the string.
    2. Initialize a list of strings test_list.
    3. Print the original list test_list.
    4. Sort the list test_list based on the case difference of each string using the sorted function and a lambda function that calls the get_case_difference function for each string in the list.
    5. Print the sorted list of strings.
    Python3
    from functools import reduce
    
    def get_case_difference(string):
        return abs(reduce(lambda count, c: count + (1 if c.islower() else -1 if c.isupper() else 0), string, 0))
    
    test_list = ["GFG", "GeeKs", "best", "FOr", "alL", "GEEKS"]
    print("The original list is : ", test_list)
    
    # Using map function to calculate case difference
    result = sorted(test_list, key=lambda x: get_case_difference(x))
    
    # Printing result
    print("Sorted Strings by case difference : ", result)
    #This code is contributed by Pushpa.
    

    Output
    The original list is :  ['GFG', 'GeeKs', 'best', 'FOr', 'alL', 'GEEKS']
    Sorted Strings by case difference :  ['GeeKs', 'FOr', 'alL', 'GFG', 'best', 'GEEKS']

    Time Complexity:

    The get_case_difference function runs in O(n) time, where n is the length of the input string.
    The sorted function runs in O(n log n) time, where n is the length of the input list.
    Overall, the time complexity of the code is O(n log n) since the sorted function dominates the time complexity.
    Space Complexity:

    The space complexity of the code is O(n), where n is the length of the input list test_list. This is because we are initializing a list of strings and storing them in memory, which takes up O(n) space. The other variables used in the code have constant space complexity.

    Method #5: Using Bubble Sort Algorithm

    1. Start with the given list of strings, test_list.
    2. Set the boolean variable swapped to True to indicate that a swap has been made.
    3. Set a variable n to the length of test_list minus 1.
    4. While swapped is True:
      a. Set swapped to False.
      b. Loop through the range of n:
      i. If the absolute difference in the number of lowercase and uppercase letters in the current string is greater than the absolute difference in the number of lowercase and uppercase letters in the next string:
      1. Swap the current string and the next string.
      2. Set swapped to True.
      c. Decrement n by 1.
    5. Return the sorted list.
    Python3
    # Python3 code to demonstrate working of
    # Sort Strings by Case difference
    # Using Bubble Sort Algorithm
    
    # initializing Matrix
    test_list = ["GFG", "GeeKs", "best", "FOr", "alL", "GEEKS"]
    
    # printing original list
    print("The original list is : " + str(test_list))
    
    # sorting using Bubble Sort Algorithm
    n = len(test_list)
    swapped = True
    while swapped:
        swapped = False
        for i in range(n - 1):
            if abs(len([ele for ele in test_list[i] if ele.islower()]) - \
                   len([ele for ele in test_list[i] if ele.isupper()])) > \
                   abs(len([ele for ele in test_list[i+1] if ele.islower()]) - \
                   len([ele for ele in test_list[i+1] if ele.isupper()])):
                test_list[i], test_list[i+1] = test_list[i+1], test_list[i]
                swapped = True
        n -= 1
    
    # printing result
    print("Sorted Strings by case difference : " + str(test_list))
    

    Output
    The original list is : ['GFG', 'GeeKs', 'best', 'FOr', 'alL', 'GEEKS']
    Sorted Strings by case difference : ['GeeKs', 'FOr', 'alL', 'GFG', 'best', 'GEEKS']
    

    Time Complexity: O(n^2), where n is the number of strings in test_list.
    Auxiliary Space: O(1), because bubble sort is an in-place sorting algorithm that does not require any additional memory allocation.

    Create Quiz

    M

    manjeet_04
    Improve

    M

    manjeet_04
    Improve
    Article Tags :
    • Python
    • Python Programs
    • Python list-programs
    • Python string-programs

    Explore

      Python Fundamentals

      Python Introduction

      2 min read

      Input and Output in Python

      4 min read

      Python Variables

      4 min read

      Python Operators

      4 min read

      Python Keywords

      2 min read

      Python Data Types

      8 min read

      Conditional Statements in Python

      3 min read

      Loops in Python - For, While and Nested Loops

      5 min read

      Python Functions

      5 min read

      Recursion in Python

      4 min read

      Python Lambda Functions

      5 min read

      Python Data Structures

      Python String

      5 min read

      Python Lists

      4 min read

      Python Tuples

      4 min read

      Python Dictionary

      3 min read

      Python Sets

      6 min read

      Python Arrays

      7 min read

      List Comprehension in Python

      4 min read

      Advanced Python

      Python OOP Concepts

      11 min read

      Python Exception Handling

      5 min read

      File Handling in Python

      4 min read

      Python Database Tutorial

      4 min read

      Python MongoDB Tutorial

      3 min read

      Python MySQL

      9 min read

      Python Packages

      10 min read

      Python Modules

      3 min read

      Python DSA Libraries

      15 min read

      List of Python GUI Library and Packages

      3 min read

      Data Science with Python

      NumPy Tutorial - Python Library

      3 min read

      Pandas Tutorial

      4 min read

      Matplotlib Tutorial

      5 min read

      Python Seaborn Tutorial

      3 min read

      StatsModel Library - Tutorial

      3 min read

      Learning Model Building in Scikit-learn

      6 min read

      TensorFlow Tutorial

      2 min read

      PyTorch Tutorial

      6 min read

      Web Development with Python

      Flask Tutorial

      8 min read

      Django Tutorial | Learn Django Framework

      7 min read

      Django ORM - Inserting, Updating & Deleting Data

      4 min read

      Templating With Jinja2 in Flask

      6 min read

      Django Templates

      5 min read

      Build a REST API using Flask - Python

      3 min read

      Building a Simple API with Django REST Framework

      3 min read

      Python Practice

      Python Quiz

      1 min read

      Python Coding Practice

      1 min read

      Python Interview Questions and Answers

      15+ min read
    top_of_element && top_of_screen < bottom_of_element) || (bottom_of_screen > articleRecommendedTop && top_of_screen < articleRecommendedBottom) || (top_of_screen > articleRecommendedBottom)) { if (!isfollowingApiCall) { isfollowingApiCall = true; setTimeout(function(){ if (loginData && loginData.isLoggedIn) { if (loginData.userName !== $('#followAuthor').val()) { is_following(); } else { $('.profileCard-profile-picture').css('background-color', '#E7E7E7'); } } else { $('.follow-btn').removeClass('hideIt'); } }, 3000); } } }); } $(".accordion-header").click(function() { var arrowIcon = $(this).find('.bottom-arrow-icon'); arrowIcon.toggleClass('rotate180'); }); }); window.isReportArticle = false; function report_article(){ if (!loginData || !loginData.isLoggedIn) { const loginModalButton = $('.login-modal-btn') if (loginModalButton.length) { loginModalButton.click(); } return; } if(!window.isReportArticle){ //to add loader $('.report-loader').addClass('spinner'); jQuery('#report_modal_content').load(gfgSiteUrl+'wp-content/themes/iconic-one/report-modal.php', { PRACTICE_API_URL: practiceAPIURL, PRACTICE_URL:practiceURL },function(responseTxt, statusTxt, xhr){ if(statusTxt == "error"){ alert("Error: " + xhr.status + ": " + xhr.statusText); } }); }else{ window.scrollTo({ top: 0, behavior: 'smooth' }); $("#report_modal_content").show(); } } function closeShareModal() { const shareOption = document.querySelector('[data-gfg-action="share-article"]'); shareOption.classList.remove("hover_share_menu"); let shareModal = document.querySelector(".hover__share-modal-container"); shareModal && shareModal.remove(); } function openShareModal() { closeShareModal(); // Remove existing modal if any let shareModal = document.querySelector(".three_dot_dropdown_share"); shareModal.appendChild(Object.assign(document.createElement("div"), { className: "hover__share-modal-container" })); document.querySelector(".hover__share-modal-container").append( Object.assign(document.createElement('div'), { className: "share__modal" }), ); document.querySelector(".share__modal").append(Object.assign(document.createElement('h1'), { className: "share__modal-heading" }, { textContent: "Share to" })); const socialOptions = ["LinkedIn", "WhatsApp","Twitter", "Copy Link"]; socialOptions.forEach((socialOption) => { const socialContainer = Object.assign(document.createElement('div'), { className: "social__container" }); const icon = Object.assign(document.createElement("div"), { className: `share__icon share__${socialOption.split(" ").join("")}-icon` }); const socialText = Object.assign(document.createElement("span"), { className: "share__option-text" }, { textContent: `${socialOption}` }); const shareLink = (socialOption === "Copy Link") ? Object.assign(document.createElement('div'), { role: "button", className: "link-container CopyLink" }) : Object.assign(document.createElement('a'), { className: "link-container" }); if (socialOption === "LinkedIn") { shareLink.setAttribute('href', `https://www.linkedin.com/sharing/share-offsite/?url=${window.location.href}`); shareLink.setAttribute('target', '_blank'); } if (socialOption === "WhatsApp") { shareLink.setAttribute('href', `https://api.whatsapp.com/send?text=${window.location.href}`); shareLink.setAttribute('target', "_blank"); } if (socialOption === "Twitter") { shareLink.setAttribute('href', `https://twitter.com/intent/tweet?url=${window.location.href}`); shareLink.setAttribute('target', "_blank"); } shareLink.append(icon, socialText); socialContainer.append(shareLink); document.querySelector(".share__modal").appendChild(socialContainer); //adding copy url functionality if(socialOption === "Copy Link") { shareLink.addEventListener("click", function() { var tempInput = document.createElement("input"); tempInput.value = window.location.href; document.body.appendChild(tempInput); tempInput.select(); tempInput.setSelectionRange(0, 99999); // For mobile devices document.execCommand('copy'); document.body.removeChild(tempInput); this.querySelector(".share__option-text").textContent = "Copied" }) } }); // document.querySelector(".hover__share-modal-container").addEventListener("mouseover", () => document.querySelector('[data-gfg-action="share-article"]').classList.add("hover_share_menu")); } function toggleLikeElementVisibility(selector, show) { document.querySelector(`.${selector}`).style.display = show ? "block" : "none"; } function closeKebabMenu(){ document.getElementById("myDropdown").classList.toggle("show"); }
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Campus Training Program
  • Explore
  • POTD
  • Job-A-Thon
  • Blogs
  • Nation Skill Up
  • Tutorials
  • Programming Languages
  • DSA
  • Web Technology
  • AI, ML & Data Science
  • DevOps
  • CS Core Subjects
  • Interview Preparation
  • Software and Tools
  • Courses
  • ML and Data Science
  • DSA and Placements
  • Web Development
  • Programming Languages
  • DevOps & Cloud
  • GATE
  • Trending Technologies
  • Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
  • Preparation Corner
  • Interview Corner
  • Aptitude
  • Puzzles
  • GfG 160
  • System Design
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences