Группа и объекты количества

Я рекомендовал бы фокусироваться на удобочитаемости и простоте для чего-то вроде этого. Легко потеряться при попытке удовлетворить несколько условий и тяжелее выяснить то, что Вы делали, когда Вы возвращаетесь к коду позже, при попытке быть умными, или максимально краткими. При создании требований отдельными и явными, можно более легко видеть тестирование их правильно. Ранние возвраты могут сохранить Ваш код менее с отступом и легче читать также.

def element_is_good(element, length):
    return isinstance(element, int) and 0 <= element < length

def sublist_is_good(sublist, length):
    return (isinstance(sublist, list)
            and len(sublist) == length
            and all(element_is_good(element, length) for element in sublist))

def list_of_lists_is_good(list_of_lists):
    n = len(list_of_lists)
    return n > 0 and all(sublist_is_good(sublist, n) for sublist in list_of_lists)

Это немного длиннее, чем другие решения, но я утверждал бы, что легче читать, легче протестировать полностью, и более удобный в сопровождении. (Это также удовлетворяет весь требования, которые Вы перечислили; DroiX86 примет пустой список или список словарей, и , kmario23 примет пустой массив или список кортежей. Я опустил Ваш "n, международное" требование, потому что функция len только возвращает ints.)

5
задан 25 October 2009 в 11:31
поделиться

2 ответа

В Linq есть особое ключевое слово, которое вы могли бы используйте.

http://www.shawson.co.uk/codeblog/linq-distinct/

1
ответ дан 14 December 2019 в 08:54
поделиться

Конечно, вот синтаксис LINQ в C #:

from word in words
group word into occurrences
select new
{
    Word = occurrences.Key,
    Count = occurrences.Count()
}

Или в «чистых» вызовах методов C #:

words.GroupBy(w => w)
     .Select(o => new 
                  { 
                     Word = o.Key,
                     Count = o.Count()
                  });

А для создания отдельного списка слов вы просто используете оператор Distinct:

words.Distinct();
6
ответ дан 14 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: