Calculate Levenshtein distance between two strings in PythonEdit Distance Between Two StringsString Matching and ClusteringSorting movie search results by similarityEdit distance between 2 stringsMaking the Levenshtein distance code cleanerEdit distance (Optimal Alignment) - follow upGet Levenshtein DistanceMessage classification with Levenshtein DistanceCode to implement the Jaro similarity for fuzzy matching stringsFinding differences in strings with Levenshtein distance and soundex

Email Account under attack (really) - anything I can do?

How to move the player while also allowing forces to affect it

Why is the design of haulage companies so “special”?

Does it makes sense to buy a cycle to learn riding?

Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?

Lied on resume at previous job

Can a planet have a different gravitational pull depending on its location in orbit around its sun?

How many letters suffice to construct words with no repetition?

Is this food a bread or a loaf?

What do you call something that goes against the spirit of the law, but is legal when interpreting the law to the letter?

When blogging recipes, how can I support both readers who want the narrative/journey and ones who want the printer-friendly recipe?

Does the average primeness of natural numbers tend to zero?

Need help identifying/translating a plaque in Tangier, Morocco

Prime joint compound before latex paint?

What are the advantages and disadvantages of running one shots compared to campaigns?

Input two commands to a new terminal?

How to manage monthly salary

Crop image to path created in TikZ?

How would photo IDs work for shapeshifters?

How can I add custom success page

Is there a way to make member function NOT callable from constructor?

Is it legal to have the "// (c) 2019 John Smith" header in all files when there are hundreds of contributors?

Wild Shape Centaur Into a Giant Elk: do their Charges stack?

Why is my log file so massive? 22gb. I am running log backups



Calculate Levenshtein distance between two strings in Python


Edit Distance Between Two StringsString Matching and ClusteringSorting movie search results by similarityEdit distance between 2 stringsMaking the Levenshtein distance code cleanerEdit distance (Optimal Alignment) - follow upGet Levenshtein DistanceMessage classification with Levenshtein DistanceCode to implement the Jaro similarity for fuzzy matching stringsFinding differences in strings with Levenshtein distance and soundex






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








6












$begingroup$


I need a function that checks how different are two different strings. I chose the Levenshtein distance as a quick approach, and implemented this function:



from difflib import ndiff

def calculate_levenshtein_distance(str_1, str_2):
"""
The Levenshtein distance is a string metric for measuring the difference between two sequences.
It is calculated as the minimum number of single-character edits necessary to transform one string into another
"""
distance = 0
buffer_removed = buffer_added = 0
for x in ndiff(str_1, str_2):
code = x[0]
# Code ? is ignored as it does not translate to any modification
if code == ' ':
distance += max(buffer_removed, buffer_added)
buffer_removed = buffer_added = 0
elif code == '-':
buffer_removed += 1
elif code == '+':
buffer_added += 1
distance += max(buffer_removed, buffer_added)
return distance


Then calling it as:



similarity = 1 - calculate_levenshtein_distance(str_1, str_2) / max(len(str_1), len(str_2))


How sloppy/prone to errors is this code? How can it be improved?










share|improve this question









New contributor




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







$endgroup$







  • 1




    $begingroup$
    Welcome to Code Review! Good job on your first question here. I wish you good reviews!
    $endgroup$
    – Alex
    8 hours ago

















6












$begingroup$


I need a function that checks how different are two different strings. I chose the Levenshtein distance as a quick approach, and implemented this function:



from difflib import ndiff

def calculate_levenshtein_distance(str_1, str_2):
"""
The Levenshtein distance is a string metric for measuring the difference between two sequences.
It is calculated as the minimum number of single-character edits necessary to transform one string into another
"""
distance = 0
buffer_removed = buffer_added = 0
for x in ndiff(str_1, str_2):
code = x[0]
# Code ? is ignored as it does not translate to any modification
if code == ' ':
distance += max(buffer_removed, buffer_added)
buffer_removed = buffer_added = 0
elif code == '-':
buffer_removed += 1
elif code == '+':
buffer_added += 1
distance += max(buffer_removed, buffer_added)
return distance


Then calling it as:



similarity = 1 - calculate_levenshtein_distance(str_1, str_2) / max(len(str_1), len(str_2))


How sloppy/prone to errors is this code? How can it be improved?










share|improve this question









New contributor




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







$endgroup$







  • 1




    $begingroup$
    Welcome to Code Review! Good job on your first question here. I wish you good reviews!
    $endgroup$
    – Alex
    8 hours ago













6












6








6


1



$begingroup$


I need a function that checks how different are two different strings. I chose the Levenshtein distance as a quick approach, and implemented this function:



from difflib import ndiff

def calculate_levenshtein_distance(str_1, str_2):
"""
The Levenshtein distance is a string metric for measuring the difference between two sequences.
It is calculated as the minimum number of single-character edits necessary to transform one string into another
"""
distance = 0
buffer_removed = buffer_added = 0
for x in ndiff(str_1, str_2):
code = x[0]
# Code ? is ignored as it does not translate to any modification
if code == ' ':
distance += max(buffer_removed, buffer_added)
buffer_removed = buffer_added = 0
elif code == '-':
buffer_removed += 1
elif code == '+':
buffer_added += 1
distance += max(buffer_removed, buffer_added)
return distance


Then calling it as:



similarity = 1 - calculate_levenshtein_distance(str_1, str_2) / max(len(str_1), len(str_2))


How sloppy/prone to errors is this code? How can it be improved?










share|improve this question









New contributor




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







$endgroup$




I need a function that checks how different are two different strings. I chose the Levenshtein distance as a quick approach, and implemented this function:



from difflib import ndiff

def calculate_levenshtein_distance(str_1, str_2):
"""
The Levenshtein distance is a string metric for measuring the difference between two sequences.
It is calculated as the minimum number of single-character edits necessary to transform one string into another
"""
distance = 0
buffer_removed = buffer_added = 0
for x in ndiff(str_1, str_2):
code = x[0]
# Code ? is ignored as it does not translate to any modification
if code == ' ':
distance += max(buffer_removed, buffer_added)
buffer_removed = buffer_added = 0
elif code == '-':
buffer_removed += 1
elif code == '+':
buffer_added += 1
distance += max(buffer_removed, buffer_added)
return distance


Then calling it as:



similarity = 1 - calculate_levenshtein_distance(str_1, str_2) / max(len(str_1), len(str_2))


How sloppy/prone to errors is this code? How can it be improved?







python edit-distance






share|improve this question









New contributor




Kyra_W 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 question









New contributor




Kyra_W 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 question




share|improve this question








edited 36 mins ago









Reinderien

5,335926




5,335926






New contributor




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









asked 9 hours ago









Kyra_WKyra_W

311




311




New contributor




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





New contributor





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






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







  • 1




    $begingroup$
    Welcome to Code Review! Good job on your first question here. I wish you good reviews!
    $endgroup$
    – Alex
    8 hours ago












  • 1




    $begingroup$
    Welcome to Code Review! Good job on your first question here. I wish you good reviews!
    $endgroup$
    – Alex
    8 hours ago







1




1




$begingroup$
Welcome to Code Review! Good job on your first question here. I wish you good reviews!
$endgroup$
– Alex
8 hours ago




$begingroup$
Welcome to Code Review! Good job on your first question here. I wish you good reviews!
$endgroup$
– Alex
8 hours ago










2 Answers
2






active

oldest

votes


















6












$begingroup$

There is a module available for exactly that calculation, python-Levenshtein. You can install it with pip install python-Levenshtein.



It is implemented in C, so is probably faster than anything you can come up with yourself.



from Levenshtein import distance as levenshtein_distance



According to the docstring conventions, your docstring should look like this, i.e. with the indentation aligned to the """ and the line length curtailed to 80 characters.



def calculate_levenshtein_distance(str_1, str_2):
"""
The Levenshtein distance is a string metric for measuring the difference
between two sequences.
It is calculated as the minimum number of single-character edits necessary to
transform one string into another.
"""
...





share|improve this answer











$endgroup$








  • 5




    $begingroup$
    Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
    $endgroup$
    – lucasgcb
    6 hours ago


















3












$begingroup$

The code itself is rather clear. There are some smaller changes I would make



tuple unpacking



You can use tuple unpacking to do:



for code, *_ in ndiff(str1, str2):


instead of:



for x in ndiff(str_1, str_2):
code = x[0]


dict results:



Instead of a counter for the additions and removals, I would keep it in 1 dict: counter = ("+": 0, "-": 0)



def levenshtein_distance(str1, str2, ):
counter = "+": 0, "-": 0
distance = 0
for edit_code, *_ in ndiff(str1, str2):
if edit_code == " ":
distance += max(counter.values())
counter = "+": 0, "-": 0
else:
counter[edit_code] += 1
distance += max(counter.values())
return distance


generators



A smaller, less useful variation, is to let this method be a generator, and use the builtin sum to do the summary. this saves 1 variable inside the function:



def levenshtein_distance_gen(str1, str2, ):
counter = "+": 0, "-": 0
for edit_code, *_ in ndiff(str1, str2):
if edit_code == " ":
yield max(counter.values())
counter = "+": 0, "-": 0
else:
counter[edit_code] += 1
yield max(counter.values())

sum(levenshtein_distance_gen(str1, str2))



timings



The differences in timings between the original and both these variations are minimal, and within the variation of results. This is rather logical, since for simple strings (aaabbbc and abcabcabc) 90% of the time is spent in ndiff






share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    );
    );
    , "mathjax-editing");

    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: "196"
    ;
    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: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    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
    );



    );






    Kyra_W is a new contributor. Be nice, and check out our Code of Conduct.









    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217065%2fcalculate-levenshtein-distance-between-two-strings-in-python%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6












    $begingroup$

    There is a module available for exactly that calculation, python-Levenshtein. You can install it with pip install python-Levenshtein.



    It is implemented in C, so is probably faster than anything you can come up with yourself.



    from Levenshtein import distance as levenshtein_distance



    According to the docstring conventions, your docstring should look like this, i.e. with the indentation aligned to the """ and the line length curtailed to 80 characters.



    def calculate_levenshtein_distance(str_1, str_2):
    """
    The Levenshtein distance is a string metric for measuring the difference
    between two sequences.
    It is calculated as the minimum number of single-character edits necessary to
    transform one string into another.
    """
    ...





    share|improve this answer











    $endgroup$








    • 5




      $begingroup$
      Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
      $endgroup$
      – lucasgcb
      6 hours ago















    6












    $begingroup$

    There is a module available for exactly that calculation, python-Levenshtein. You can install it with pip install python-Levenshtein.



    It is implemented in C, so is probably faster than anything you can come up with yourself.



    from Levenshtein import distance as levenshtein_distance



    According to the docstring conventions, your docstring should look like this, i.e. with the indentation aligned to the """ and the line length curtailed to 80 characters.



    def calculate_levenshtein_distance(str_1, str_2):
    """
    The Levenshtein distance is a string metric for measuring the difference
    between two sequences.
    It is calculated as the minimum number of single-character edits necessary to
    transform one string into another.
    """
    ...





    share|improve this answer











    $endgroup$








    • 5




      $begingroup$
      Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
      $endgroup$
      – lucasgcb
      6 hours ago













    6












    6








    6





    $begingroup$

    There is a module available for exactly that calculation, python-Levenshtein. You can install it with pip install python-Levenshtein.



    It is implemented in C, so is probably faster than anything you can come up with yourself.



    from Levenshtein import distance as levenshtein_distance



    According to the docstring conventions, your docstring should look like this, i.e. with the indentation aligned to the """ and the line length curtailed to 80 characters.



    def calculate_levenshtein_distance(str_1, str_2):
    """
    The Levenshtein distance is a string metric for measuring the difference
    between two sequences.
    It is calculated as the minimum number of single-character edits necessary to
    transform one string into another.
    """
    ...





    share|improve this answer











    $endgroup$



    There is a module available for exactly that calculation, python-Levenshtein. You can install it with pip install python-Levenshtein.



    It is implemented in C, so is probably faster than anything you can come up with yourself.



    from Levenshtein import distance as levenshtein_distance



    According to the docstring conventions, your docstring should look like this, i.e. with the indentation aligned to the """ and the line length curtailed to 80 characters.



    def calculate_levenshtein_distance(str_1, str_2):
    """
    The Levenshtein distance is a string metric for measuring the difference
    between two sequences.
    It is calculated as the minimum number of single-character edits necessary to
    transform one string into another.
    """
    ...






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 9 hours ago

























    answered 9 hours ago









    GraipherGraipher

    26.9k54396




    26.9k54396







    • 5




      $begingroup$
      Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
      $endgroup$
      – lucasgcb
      6 hours ago












    • 5




      $begingroup$
      Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
      $endgroup$
      – lucasgcb
      6 hours ago







    5




    5




    $begingroup$
    Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
    $endgroup$
    – lucasgcb
    6 hours ago




    $begingroup$
    Just to note the module is licensed under GPL 2.0 so watch out if you're using it for work.
    $endgroup$
    – lucasgcb
    6 hours ago













    3












    $begingroup$

    The code itself is rather clear. There are some smaller changes I would make



    tuple unpacking



    You can use tuple unpacking to do:



    for code, *_ in ndiff(str1, str2):


    instead of:



    for x in ndiff(str_1, str_2):
    code = x[0]


    dict results:



    Instead of a counter for the additions and removals, I would keep it in 1 dict: counter = ("+": 0, "-": 0)



    def levenshtein_distance(str1, str2, ):
    counter = "+": 0, "-": 0
    distance = 0
    for edit_code, *_ in ndiff(str1, str2):
    if edit_code == " ":
    distance += max(counter.values())
    counter = "+": 0, "-": 0
    else:
    counter[edit_code] += 1
    distance += max(counter.values())
    return distance


    generators



    A smaller, less useful variation, is to let this method be a generator, and use the builtin sum to do the summary. this saves 1 variable inside the function:



    def levenshtein_distance_gen(str1, str2, ):
    counter = "+": 0, "-": 0
    for edit_code, *_ in ndiff(str1, str2):
    if edit_code == " ":
    yield max(counter.values())
    counter = "+": 0, "-": 0
    else:
    counter[edit_code] += 1
    yield max(counter.values())

    sum(levenshtein_distance_gen(str1, str2))



    timings



    The differences in timings between the original and both these variations are minimal, and within the variation of results. This is rather logical, since for simple strings (aaabbbc and abcabcabc) 90% of the time is spent in ndiff






    share|improve this answer









    $endgroup$

















      3












      $begingroup$

      The code itself is rather clear. There are some smaller changes I would make



      tuple unpacking



      You can use tuple unpacking to do:



      for code, *_ in ndiff(str1, str2):


      instead of:



      for x in ndiff(str_1, str_2):
      code = x[0]


      dict results:



      Instead of a counter for the additions and removals, I would keep it in 1 dict: counter = ("+": 0, "-": 0)



      def levenshtein_distance(str1, str2, ):
      counter = "+": 0, "-": 0
      distance = 0
      for edit_code, *_ in ndiff(str1, str2):
      if edit_code == " ":
      distance += max(counter.values())
      counter = "+": 0, "-": 0
      else:
      counter[edit_code] += 1
      distance += max(counter.values())
      return distance


      generators



      A smaller, less useful variation, is to let this method be a generator, and use the builtin sum to do the summary. this saves 1 variable inside the function:



      def levenshtein_distance_gen(str1, str2, ):
      counter = "+": 0, "-": 0
      for edit_code, *_ in ndiff(str1, str2):
      if edit_code == " ":
      yield max(counter.values())
      counter = "+": 0, "-": 0
      else:
      counter[edit_code] += 1
      yield max(counter.values())

      sum(levenshtein_distance_gen(str1, str2))



      timings



      The differences in timings between the original and both these variations are minimal, and within the variation of results. This is rather logical, since for simple strings (aaabbbc and abcabcabc) 90% of the time is spent in ndiff






      share|improve this answer









      $endgroup$















        3












        3








        3





        $begingroup$

        The code itself is rather clear. There are some smaller changes I would make



        tuple unpacking



        You can use tuple unpacking to do:



        for code, *_ in ndiff(str1, str2):


        instead of:



        for x in ndiff(str_1, str_2):
        code = x[0]


        dict results:



        Instead of a counter for the additions and removals, I would keep it in 1 dict: counter = ("+": 0, "-": 0)



        def levenshtein_distance(str1, str2, ):
        counter = "+": 0, "-": 0
        distance = 0
        for edit_code, *_ in ndiff(str1, str2):
        if edit_code == " ":
        distance += max(counter.values())
        counter = "+": 0, "-": 0
        else:
        counter[edit_code] += 1
        distance += max(counter.values())
        return distance


        generators



        A smaller, less useful variation, is to let this method be a generator, and use the builtin sum to do the summary. this saves 1 variable inside the function:



        def levenshtein_distance_gen(str1, str2, ):
        counter = "+": 0, "-": 0
        for edit_code, *_ in ndiff(str1, str2):
        if edit_code == " ":
        yield max(counter.values())
        counter = "+": 0, "-": 0
        else:
        counter[edit_code] += 1
        yield max(counter.values())

        sum(levenshtein_distance_gen(str1, str2))



        timings



        The differences in timings between the original and both these variations are minimal, and within the variation of results. This is rather logical, since for simple strings (aaabbbc and abcabcabc) 90% of the time is spent in ndiff






        share|improve this answer









        $endgroup$



        The code itself is rather clear. There are some smaller changes I would make



        tuple unpacking



        You can use tuple unpacking to do:



        for code, *_ in ndiff(str1, str2):


        instead of:



        for x in ndiff(str_1, str_2):
        code = x[0]


        dict results:



        Instead of a counter for the additions and removals, I would keep it in 1 dict: counter = ("+": 0, "-": 0)



        def levenshtein_distance(str1, str2, ):
        counter = "+": 0, "-": 0
        distance = 0
        for edit_code, *_ in ndiff(str1, str2):
        if edit_code == " ":
        distance += max(counter.values())
        counter = "+": 0, "-": 0
        else:
        counter[edit_code] += 1
        distance += max(counter.values())
        return distance


        generators



        A smaller, less useful variation, is to let this method be a generator, and use the builtin sum to do the summary. this saves 1 variable inside the function:



        def levenshtein_distance_gen(str1, str2, ):
        counter = "+": 0, "-": 0
        for edit_code, *_ in ndiff(str1, str2):
        if edit_code == " ":
        yield max(counter.values())
        counter = "+": 0, "-": 0
        else:
        counter[edit_code] += 1
        yield max(counter.values())

        sum(levenshtein_distance_gen(str1, str2))



        timings



        The differences in timings between the original and both these variations are minimal, and within the variation of results. This is rather logical, since for simple strings (aaabbbc and abcabcabc) 90% of the time is spent in ndiff







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 6 hours ago









        Maarten FabréMaarten Fabré

        5,119517




        5,119517




















            Kyra_W is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            Kyra_W is a new contributor. Be nice, and check out our Code of Conduct.












            Kyra_W is a new contributor. Be nice, and check out our Code of Conduct.











            Kyra_W is a new contributor. Be nice, and check out our Code of Conduct.














            Thanks for contributing an answer to Code Review Stack Exchange!


            • 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.

            Use MathJax to format equations. MathJax reference.


            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%2fcodereview.stackexchange.com%2fquestions%2f217065%2fcalculate-levenshtein-distance-between-two-strings-in-python%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

            Bett Inhaltsverzeichnis Geschichte | Bettformen | Bettgrößen | Andere Bezeichnungen | Bettenmangel | Betten in der bildenden Kunst | Schlafmedizinische Gesichtspunkte | Siehe auch | Literatur | Weblinks | Einzelnachweise | NavigationsmenüBett, Bettstatt, BettstelleCommons: BettBabybetten: Anwendung, Ausstattungsmerkmale und VergleichskriterienWasserbetten. Vorurteile im TestHapfnNursch10.1007/s11818-012-0584-74006250-8AKS4329276-8

            Luksemburg Sisukord Nimi | Asend | Loodus | Riigikord | Haldusjaotus | Rahvastik | Riigikaitse | Majandus | Taristu | Ajalugu | Eesti ja Luksemburgi suhted | Haridus | Kultuur | Vaata ka | Viited | Välislingid | Navigeerimismenüü50° N, 6° EÜlevaade Luksemburgi kaitsealadest.Luksemburgi rahvaarv. Statistikaamet.World Bank'i andmebaasÜlevaade Luksemburgi loodusest.Ülevaade Luksemburgi metsadest.Guy Colling. "Red List of the Vascular Plants of Luxembourg." Travaux scientifiques du Musée national d’histoire naturelle Luxembourg. 2005.Luxembourg’s biodiversity at risk.Maailma kahepaiksete andmebaas.Denis Lepage. "Luxembourg." Avibase.Ülevaade temperatuuridest. Luksemburgi meteoroloogiateenistus.Ülevaade Luksemburgist. Euroopa Liidu esinduse koduleht.Système politique. TerritoireÜlevaade Luksemburgi rahvastikust. Luksemburgi statistikaamet.Luksemburgi rahvastik. Luksemburgi statistikaamet.The World FactbookMonique Borsenberger, Paul Dickes. "Religions au Luxembourg. Quelle évolution entre 1999-2008". Luksemburgi statistikaamet. 2011.Luksemburgi peapiiskopkond. Catholic-Hierarchy.Luksemburgi armee koduleht.Luksemburgi armee relvastus.Eesti Välisministeerium.Luksemburgi rahvastik. Luksemburgi statistikaamet.Luksemburgi Eesti Seltsi koduleht.Helen Eelrand. "Raadio, mis muutis maailma." Eesti Päevaleht. 13. märts 2004.Ülevaade Luksemburgi haridussüsteemist.Ülevaade Luksemburgi keskkoolidest.Luksemburgr

            Valle di Casies Indice Geografia fisica | Origini del nome | Storia | Società | Amministrazione | Sport | Note | Bibliografia | Voci correlate | Altri progetti | Collegamenti esterni | Menu di navigazione46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)46°46′N 12°11′E / 46.766667°N 12.183333°E46.766667; 12.183333 (Valle di Casies)Sito istituzionaleAstat Censimento della popolazione 2011 - Determinazione della consistenza dei tre gruppi linguistici della Provincia Autonoma di Bolzano-Alto Adige - giugno 2012Numeri e fattiValle di CasiesDato IstatTabella dei gradi/giorno dei Comuni italiani raggruppati per Regione e Provincia26 agosto 1993, n. 412Heraldry of the World: GsiesStatistiche I.StatValCasies.comWikimedia CommonsWikimedia CommonsValle di CasiesSito ufficialeValle di CasiesMM14870458910042978-6