Помогите с преобразованием списка
Главная › Форумы › Python › Помогите с питон кодом › Помогите с преобразованием списка
- В этой теме 35 ответов, 4 участника, последнее обновление 9 лет, 2 месяца назад сделано Vladimir.
-
АвторСообщения
-
я кинул лишь образец массива, сам массив мне изначально не известен. по сути я работаю с массивом свай (свайное поле), мне в спецификацию надо положить для каждого типа свай группы номеров.
тип1 : 1-8, 10-20
тип1: 9, 21-51
и т.д.
в си это вот так
class Program
{
static void Main(string[] args)
{
int[] arr = new int[] { 1, 3, 4, 4, 4, 4, 4, 4, 4, 6, 7, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 14, 101,102,103, 123, 124, 124, 125, 136 };string s = “”;
for (int i = 0; i < arr.Length; i++)
{
s += arr[i] + (i == arr.Length – 1 ? “” : “, “);
}
Console.WriteLine(“Исходный массив:”);
Console.WriteLine(s);int[] newarr = arr.Distinct().ToArray();
s = “”;
for (int i = 0; i < newarr.Length; i++)
{
s += newarr[i] + (i == newarr.Length – 1 ? “” : “, “);
}
Console.WriteLine(“Новый массив:”);
Console.WriteLine(s);s = newarr[0].ToString();
int prev = newarr[0];int c = 0;
for (int i = 1; i < newarr.Length; i++)
{
int t = prev + 1;
if (t == newarr[i])
{
c += 1;
}
else
{
if (c == 0)
{шо, никто не поможет скрыптом?
дык, а чего нужно то?
скрипт ты показал, я думал, что все сделал уже..
не хватает знаний питона) тема же “помогите с питон кодом”. т.к. примера решения подобной задачи пока не видел, сам не могу записать, а Лутца я дочитаю ой как не скоро, много воды.
скрипт на си мне не понятен (точнее догадываюсь, но это не то, что ты хотел в самом начале)
давай с самого начала:
//Есть некий список [1,1,2,2,2,2,3,4,4,4,7,7,7,8,9,10,10]
надо его привести к виду 1-4, 7-10 //
Потом ты говоришь, что: ” я не знаю заранее, где будет разрыв в списке, потому не могу вот так указать, например, 4. Так же разрыв может быть не один, т.е. на выходе может быть и не 2 массива. ”
Что определяет разрыв? как он задается?
Опиши БОЛЕЕ ДЕТАЛЬНО задачу или приложи конкретный файлик.
Понятно же вроде. Надо найти в этом массиве интервалы с шагом 1. Где шаг больше единицы интервалы отделяются друг от друга. Потом интервалы именуется по первому и конечному значению через тире.
Евгений все верно написал. Разрыв – это разница между значениями больше 1. самих таких пар типа 1-4 и 7-10 может быть хоть 10. зрительно выдернуть, что на цифре 4 у меня начинается новая серия с шагом 1 просто не реально. вот пример, который пришлось зрительно выискивать 2-196, 599-1044, 4051-5009.
Всего свай около 10тыс, небольшой объект, КАМАЗ, но бывает все гораздо печальнее.
я правильно понимаю, что из списка 1,1,2,2,2,2,3,4,4,4,7,7,7,8,9,10,10
это могут быть интервалы 1-3, 1-4, 1-7, 1-8, 1-9, 1-10, 2-4, 2-7, 2-8, 2-9, 2-10, 3- 7, 3-8, 3-9, 3-10, 4-7, 4-8, 4-9, 4-10, 7-9, 7-10, 8-10 ?
нет, возьмем ряд 1,2,3,4,5,10,11,12,16,17,18,19,25,26,27,28,29,30
результат 1-5,10-12,16-19,25-30
Вроде получилось.Использовал только один кастом нод из пакета ClockWork – List.ChopByLenghts. Ссылка: DivideNumberRange
чето накрутил, сам не знаю как
inn=IN[0]
a = []
for i in range(len(IN[0])):
if i == 0:
a.append(inn[0])
elif i< =(len(IN[0])-2) and inn[i+1]-inn[i]>1:
a.append(inn[i])
a.append(inn[i+1])
elif i == (len(IN[0])-1):
a.append(inn[-1])
aa=[]
j=0
for k in range(len(a)-1):
aa.append(str(a[j]) + "-" + str(a[j+1]))
j=j+2
if j > len(a)-1:
break
OUT=aap.s. смотрю Женя опередил, молодец
Да, только с ошибкой. Уже исправил. Файл перезалил уже, щас скрин обновлю.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.