Что более читаемо? [закрытый]

Вот быстрый способ настроить DataFrame:

import pandas as pd
import numpy as np

data = [
    [False, "bird", ""],
    [True, "fish", ""],
    [True, "Tiger", ""],
    [False, "Elephant", ""],
]

df = pd.DataFrame(data=data, columns=["A", "B", "C"])

Это создает переменную df, содержащую DataFrame в Pandas.

Теперь используйте этот код для итерации по DataFrame и установите каждое значение:

last = []
for index, row in df.iterrows():
    if index == 0:
        df.at[index, 'C'] = row['B'] # because first one has no previous to concatenate to
    else:
        if (row['A']): # check A
            df.at[index, 'C'] = last['C']+','+row['B'] # if A is true, then concatenate previous B and this one
        else:
            df.at[index, 'C'] = row['B'] # else, use this B
    last = row # now set this row to the last one that was accessed, for the next iteration of this loop

Если вы print(pd) в этот момент, вы получите ожидаемый результат.

Вот полный код, который я использовал:

import pandas as pd
import numpy as np

data = [
    [False, "bird", ""],
    [True, "fish", ""],
    [True, "Tiger", ""],
    [False, "Elephant", ""],
]

df = pd.DataFrame(data=data, columns=["A", "B", "C"])

print(df)

last = []
for index, row in df.iterrows():
    if index == 0:
        df.at[index, 'C'] = row['B'] # because first one has no previous to concatenate to
    else:
        if (row['A']): # check A
            df.at[index, 'C'] = last['B']+','+row['B']
        else:
            df.at[index, 'C'] = row['B']
    last = row

print(df)
6
задан Scott Dorman 14 October 2008 в 16:44
поделиться

21 ответ

Если команда, которая работает над кодом, знает то, что версия Linq делает и знает свои внутренние работы, то это более читаемо.

16
ответ дан 8 December 2019 в 02:06
поделиться

Второй, определенно. Наличие такого большого блока кода для того, чтобы сделать что-то столь простое, как подведение итогов является просто ненужным. Я также не знаю, каков LINQ, но это совершенно читаемо мне.

0
ответ дан 8 December 2019 в 02:06
поделиться

Я думаю, что это зависит от того, под чем Вы подразумеваете "читаемый". Первый пример ясно указывает на логику программы и должен быть понятным любым с фоном программирования.

Мне второй пример более интуитивен на основе контекста (т.е. Вы берете массив (или некоторый другой тип набора) и выполняете метод под названием Сумма на каждом элементе того массива). Единственное место второй пример может стать менее ясным, находится в самом фактическом лямбда-выражении специально для кого-то, кто не имел опыта с лямбдами или уже имеет знания в функциональном программировании.

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

0
ответ дан 8 December 2019 в 02:06
поделиться

Я соглашаюсь с теми, кто говорит, что второе будет понятно, поскольку Linq становится более широко принятым. Это, конечно, более сжато.

Однако у меня есть некоторая озабоченность по поводу простоты отладки. Кажется намного легче ступить через код в foreach, видеть точно, что это делает в каждой передаче.

0
ответ дан 8 December 2019 в 02:06
поделиться

Если Ваша цель состоит в том, чтобы сделать это более читаемым для "кого-либо", который мог бы приехать после Вас, затем использовать foreach. Я интерпретирую "более читаемый", чтобы означать, что любой с опытом в основах языка должен смочь схватить. Для кого-то незнакомого с linq и все еще использующий VS2005 или ранее, linq синтаксис сбивал бы с толку.

0
ответ дан 8 December 2019 в 02:06
поделиться

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

0
ответ дан 8 December 2019 в 02:06
поделиться

Я вижу, что люди говорят, что им нравится первый, "если Вы не знаете Linq". Да, и первый нечитабелен, если Вы не знаете C#. Это не вопрос, "который более читаем", но, "какие функции языка - мы удобное использование?"

Запустите путем разговора с командой о частях языка/платформы/набора инструментов, который все ненавидят, и объявите их от пределов. Все остальное считают частью стандартного словаря, и все, как ожидают, будут быстры. Этот список должен войти в Ваш документ стандартов кодирования, прямо рядом с "никогда не делают изменяемые типы значения", и "не беспокоятся тривиальными свойствами для непубличных участников".

Пока Linq не находится на Вашем "исключать" список, второй пример намного более читаем, чем первое. Почему? Поскольку это объявляет намерение кода, вместо того, чтобы просто представить механизм для читателя для дешифровки.

0
ответ дан 8 December 2019 в 02:06
поделиться

или

десятичное число technicalPremium = 0;

foreach (Риск риска в рисках) technicalPremium = technicalPremium + риск. TechnicalPremium;

возвратите technicalPremium;

0
ответ дан 8 December 2019 в 02:06
поделиться

Каждый язык имеет конвенции для лучшего способа кодировать такие вещи, поэтому что является самым читаемым людям, которые регулярно используют тот язык, не универсально. Для Java или нормального программиста C#, первая опция более читаема. Для кого-то привыкшего к LINQ или функциональному программированию, второе более читаемо.

0
ответ дан 8 December 2019 в 02:06
поделиться

Я не знаю c#, но вторая альтернатива выглядит намного более чистой мне, и я мог понять то, что это делает (хорошо с некоторым предположением и перепроверкой с первой версией). Probabably из-за некоторого функционального фона. Но в первом необходимо искать technicalPremium в 4(!) местах. Второй намного короче и легче понять, перечитываете ли Вы просто по коду.

0
ответ дан 8 December 2019 в 02:06
поделиться

Здесь нет никакой проблемы удобочитаемости. Нажмите на Sum и поразите F1.

Linq для победы.

0
ответ дан 8 December 2019 в 02:06
поделиться

Если бы Вы предоставляете комментарий, объясняя, что это - цель, то я пошел бы для опции Linq.

0
ответ дан 8 December 2019 в 02:06
поделиться

Я сказал бы, что первое, так как я не знаю linq. Из-за опасности по документированию я использовал бы то с кратким описанием того, что продолжается. Или просто скажите, что это - linq для людей, которые могут понятия не иметь.

0
ответ дан 8 December 2019 в 02:06
поделиться

Первая опция более читаема к более широкому диапазону людей. Вторая опция имеет 'барьер записи', в котором читатель мог бы или мог бы знать и понять LINQ. Это более сжато, и могло бы быть поэтому лучше, если Ваша аудитория по тому барьеру записи.

1
ответ дан 8 December 2019 в 02:06
поделиться

Пойдите с linq. Если Вы будете думать, что этому нужно объяснение, то один комментарий строки будет заботиться об этом. Поскольку люди становятся более привыкшими к linq, потребность в комментариях уйдет.

2
ответ дан 8 December 2019 в 02:06
поделиться

Я думаю, что второй вариант лучше в этом, это должно быть более эффективно. Однако, менее очевидно, что происходит (по крайней мере, со мной).

0
ответ дан 8 December 2019 в 02:06
поделиться

Код LINQ и очень читаем и самодокументирует.

1
ответ дан 8 December 2019 в 02:06
поделиться

Для кого-то, кто может считать LINQ, LINQ один.

Для кого-то, кто должен интерпретировать код шаг за шагом (при помощи intellisense/documentation более короткий.

4
ответ дан 8 December 2019 в 02:06
поделиться

Ни один. Первый является более подробным и вероятным быть понятым под всеми. Второй более краток и понятен всем даже с передающим знанием linq.

Я сказал бы, что можно основывать выбор на среде, в которой Вы находитесь.

12
ответ дан 8 December 2019 в 02:06
поделиться

Используйте, какой бы ни Вы предпочитаете, но скрываете его в методе:

return risks.SumTechnicalPremium();
15
ответ дан 8 December 2019 в 02:06
поделиться

Первое, если Вы не знаете о Linq. Любой разработчик может считать и понять первого.

0
ответ дан 8 December 2019 в 02:06
поделиться
Другие вопросы по тегам:

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