Быстрый перевод List в string
Есть List с огромным количеством строк (с действительно огромным количеством строк). Как его можно быстро записать в одну строку ?
foreach(string s in list_1) string_1 = string_1 + s;
то запись в одну строку происходит минут 40-50.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Перевод из List в List
Всем доброго времени суток. Такой вопрос, как можно перевести List<int> в List<String>, и можно ли.
Разбить List на несколько обьектов c List
Задумался как я то кусочками все делить оказалось не так уж просто :scratch: List<string>.
Как передать list в поток и как такой же list вывести из потока?
Как передать list<string> в поток и как такой же list<string> вывести из потока в richtextbox.
Заполнить Dictionary> из файла ресурсов
Всем привет! У меня появилась проблема, мне нужно заполнить Dictionary<string, list<string>> из.
11867 / 8190 / 1250
Регистрация: 21.01.2016
Сообщений: 30,811
Stud_force, подсчитать суммарное количество символов, выделить массив char нужного размера, последовательно заполнить его содержимым всех строк, передать массив в конструктор string .
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
Сообщение было отмечено Usaga как решение
Решение
var result = String.Join(", ", list_1.ToArray());
померяй сколько по времени?
Добавлено через 3 минуты
Сообщение от Stud_force
Как преобразовать список в строку в Python
Рассказываем о методе join() и других полезных инструментах для конвертирования Python‑списков в строки.
Иллюстрация: Оля Ежак для Skillbox Media
Иван Стуков
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
В Python существует два основных способа сделать из списка строку: с помощью цикла и с помощью метода join(). У обоих есть нюансы, о которых мы сейчас расскажем.
Преобразование с помощью цикла
Более понятный для новичка, но и более громоздкий способ перевести список в строку — воспользоваться циклом. Если вы уже знаете его и просто хотите узнать более эффективный и быстрый метод, то сразу переходите к следующему разделу. А если нет, то давайте разбираться.
Как это работает: мы создаём пустую строку, потом с помощью цикла переберём каждый элемент списка и на каждой итерации будем добавлять к строке текущий элемент списка.
lst = ['Преобразование','через','цикл'] #Создаём пустую строку string = '' #По очереди добавляем к ней каждый элемент списка for el in lst: string += el print(string) >>> Преобразованиечерезцикл
Однако такой код не будет работать, если в списке есть не только строки, но и, например, числа. Дело в том, что в Python нельзя смешивать данные разных типов.
Поэтому, перед тем как добавлять элемент в список, его нужно преобразовать в строку. Делается это с помощью функции str(). Добавим её в наш код.
#Создаём список, в котором есть как строки, так и цифры lst = ['Преобразование','через','цикл', 2] string = '' for el in lst: string += str(el) #Превращаем каждый элемент списка в строку print(string) >>> Преобразованиечерезцикл2
Если нужно установить разделитель между строками, то для него нужно прописать отдельную строчку кода внутри цикла.
lst = ['Преобразование','через','цикл', 3] string = '' for el in lst: #Добавляем к строке элемент списка string += str(el) #Добавляем к строке разделитель — в данном случае пробел string += ' ' print(string) >>> Преобразование через цикл 3
Обратите внимание: раз мы добавляем разделитель на каждой итерации, пробел будет и после цифры 3 нашего последнего элемента. Это легко проверить, если вместо пробела добавлять какой-то другой, видимый символ.
Эту проблему можно решить — ещё больше усложнив код. Например, введя условие, которое проверяет, последний это элемент в списке или нет. Однако гораздо проще и удобнее превратить список в строку, используя встроенный метод join().
Преобразование с помощью метода join()
Метод join(), по сути, делает всё то же самое, что и наш цикл, но лучше, удобнее и занимает всего одну строку. Вот как его применяют:
string.join(lst)
В качестве аргумента lst он получает список, элементы которого и будет объединять в строку, а string — это разделитель. Если мы не хотим его устанавливать, то в качестве string нужно указать пустую строку.
Посмотрим, как join() применяется на практике.
lst = ['Преобразование', 'через', 'метод', 'join()'] #Объединяем элементы списка с пустым разделителем print(''.join(lst)) >>> Преобразованиечерезметодjoin() #Устанавливаем пробел в качестве разделителя print(' '.join(lst)) >>> Преобразование через метод join()
Заметили особенность? Разделители ставятся только между элементами, а не после каждого элемента, как было в нашем цикле. join() — умница. Однако и тут есть ахиллесова пята: если в списке встречаются нестроковые элементы, мы получим ошибку. Чтобы этого избежать, надо опять-таки сначала превратить все нестроки в строки. Сделать это можно двумя способами.
Использовать выражение-генератор
Выражение-генератор — это конструкция, которая позволяет провести операцию над каждым элементом списка. Оно возвращает генератор, с которым метод join() обращается точно так же, как и со списками.
lst = [1, 1.2, 'строка', False] print(' '.join(str(el) for el in lst)) >>> 1 1.2 строка False
Конструкция str(el) for el in lst означает, что каждый элемент el в списке lst будет превращён в строку с помощью функции str (стандартной функции Python, которую мы уже использовали, когда работали с циклом).
Использовать функцию map()
Функция map() умеет делать то же самое, что и выражение-генератор, но их синтаксис отличается. В качестве первого аргумента она принимает саму операцию, в качестве второго — список, к элементам которого эта операция применяется.
lst = [1, 1.2, 'строка', False] print(' '.join(map(str, lst))) >>> 1 1.2 строка False
Конструкция map(str, lst) означает, что каждый элемент в списке lst будет превращён в строку с помощью функции str. Обратите внимание, что в качестве аргумента в map() передаётся только название функции, без скобок.
Итоги
Преобразовать список в строку можно с помощью цикла, но для этого есть и более удобный инструмент — метод join().
Если содержит нестроковые элементы, то их для начала придётся превратить в строки — иначе выскочит ошибка. Для этого можно воспользоваться выражением-генератором или функцией map().
Читайте также:
- Списки в Python: что это такое и как с ними работать
- Тест. Какой язык создадите вы — Java или Python?
- Язык Go: что под капотом и зачем программисту учить его как второй
Преобразование списка в строку с использованием разделителя в C#
В этом посте будет обсуждаться, как преобразовать список в строку в C#, где отдельные элементы списка объединяются в одну строку с использованием заданного разделителя. Разделитель не следует добавлять до или после списка.
1. Использование String.Join() метод
Рекомендуемое решение — использовать String.Join() метод класса строк, который объединяет элементы указанного массива или коллекции вместе с указанным разделителем.
Как конвертировать list в string[]?
Привет, обитатели тостера. Я только начал изучать C++. Я свободно работаю с ООП в PHP. Умею мыслить логически. Но понять си пока не могу.
Нужно мне отпарсить строку. Разбить ее на массив по разделителю (как explode в php). Нашел много обрывков кода. Пытаюсь собрать вместе. Но как же мне это сделать?
string* parse(string s, int sort = -1) < listwords; istringstream ist(s); string tmp; int i = 1; while (ist >> tmp) < words.push_back(tmp); i++; >string* string_array = new string[i]; switch (sort) < case -1: // UNSORTED copy(words.begin(), words.end(), ostream_iterator(cout, "\n")); break; case 0: // ASC words.sort(); copy(words.begin(), words.end(), ostream_iterator(cout, "\n")); break; case 1: // DESC words.sort(greater()); copy(words.begin(), words.end(), ostream_iterator(cout, "\n")); break; > return string_array; >
Код может разбить строку и вывести результат в консоль. А мне нужен результат в виде массива строк. 3 часа уже безрезультатно гуглю.
P.S. Если не трудно, объясните по русски, что такое iterator
- Вопрос задан более трёх лет назад
- 1098 просмотров
1 комментарий
Оценить 1 комментарий
Да, вообще-то, там вектор надо сделать, заполнить его и вернуть.
Решения вопроса 1
Программист на «си с крестами» и не только
Итератор — это объект с семантикой указателя, который может указывать на N+1 точку в объекте.
Раз он с семантикой указателя, у него есть операции «унарная звезда» и −> (разыменование и разыменование+взятие поля). Также у итератора есть операция ++ (сдвинуться на следующую позицию). Если это т.н. «однонаправленный итератор» — всё, больше ничего.
Также бывают т.н. двунаправленные итераторы (есть операция −−), и итераторы произвольного доступа (их можно свободно складывать с числами — ну совсем как указатели). В частности, у std::list итераторы двунаправленные.
У итераторов неопределённое поведение…
• при попытке выйти за начало или конец;
• при попытке разыменовать, если он смотрит на последнюю позицию (отмеченную как «конец»).
Конкретно о задаче.
1. std::vector предпочтительнее std::list.
2. Не нужно возвращать string*, хватает какого-нибудь контейнера (std::vector или std::list).
3. Если функциональности и скорости istringstream хватает, флаг в руки! Я бы написал по хардкору, с нуля. Вот мой код, выдранный из моего проекта, наверно, будет несложно переделать его в учебный.
void parseCommaList( const char *aStart, // указатель на начало const char *aEnd, // указатель на символ за концом char aComma, // символ-разделитель bool aSkipEmpty, // true, если пустые подстроки пропускать ProcParseCommaList aCallback, // функция-нагрузка void *aData) // этот параметр нужен, чтобы передавать какие хочешь данные в функцию-нагрузку, удаляй его смело! < str::trim(aStart, aEnd); // моя функция; пододвигает aStart вперёд и aEnd назад, убирая пробелы. // Если удаление пробелов не нужно — удаляй! Если нужно — пиши сам. if (aStart == aEnd) return; const char *sstart = aStart; for (const char *p = aStart; p != aEnd; ++p) < if (*p != aComma) continue; const char *send = p; str::trim(sstart, send); // то же самое, можно убрать if (p != sstart || !aSkipEmpty) aCallback(sstart, send, aData); // замени на боевую нагрузку sstart = p + 1; >str::trim(sstart, aEnd); // то же самое, можно убрать if (sstart != aEnd || !aSkipEmpty) aCallback(sstart, aEnd, aData); // замени на боевую нагрузку >
И, соответственно, версия для std::string.
inline void parseCommaList( const std::string &aIn, char aComma, bool aSkipEmpty, ProcParseCommaList aCallback, void *aData)