16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 150
Записей в блоге: 1
1

Создать новый массив, исключив из переданного массива совпадающие столбцы

18.02.2019, 20:57. Показов 3197. Ответов 9
Метки нет (Все метки)

Не понимаю как написать.

Задача:
Создать новый двумерный массив, исключив из переданного массива совпадающие столбцы. (Совпадающие столбцы – столбцы, у которых все соответствующие элементы равны друз другу). При формировании нового массива оставить только первый из каждого набора совпадающих столбцов.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2019, 20:57
Ответы с готовыми решениями:

Получить из исходного массива новый массив, исключив из него все элементы с максимальным значением
Задан массив. Составить алгоритм и программу, которая выводит исходный массив и массив, полученный...

Сформировать новый массив, исключив из заданного массива числа, расположенные между max/min
Дано натуральное число n, целые числа а0, а1, .. an . Сформировать новый массив, исключив из...

Сформировать новый массив, исключив из исходного массива данные о подарках, где меньше 10 конфет или больше 150
Дан массив, элементами которого являются данные о количестве конфет в новогодних подарках....

Сформировать новый массив, исключив из исходного массива данные о подарках, где меньше 10 конфет или больше 150.
Дан массив, элементами которого являются данные о количестве конфет в новогодних подарках....

9
308 / 160 / 66
Регистрация: 18.01.2019
Сообщений: 449
18.02.2019, 22:51 2
Python
1
2
3
4
5
6
a = {'a':1, 'b':2}
b = {'c':3, 'a':4}
x = {**a, **b}
z = {**b, **a}
a.update(b)
print(x, z, a)
0
308 / 160 / 66
Регистрация: 18.01.2019
Сообщений: 449
19.02.2019, 05:37 3
Python
1
2
3
4
5
a = [[1,1], [2,2]]
b = [[3,3], [2,2]]
z = []
[z.append(x) for x in [*a, *b] if x not in z]
print(z)
1
1726 / 966 / 198
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
20.02.2019, 17:28 4
svtslv, В условии говорится,
Цитата Сообщение от N1x0n Посмотреть сообщение
Создать новый двумерный массив, исключив из переданного массива совпадающие столбцы.
У Вас не один, а два двухмерных массива, и вы из них получаете один двухмерный массив с двумя одинаковыми столбцами.
Это не совсем то, что нужно.
К примеру, код должен в матрице
Python
1
2
3
M = [[1,2,3,2,1,2,3,2], 
     [4,5,6,5,2,5,6,1], 
     [7,8,9,8,3,8,9,7]]
убрать одинаковые столбцы и получить вот такую матрицу

Python
1
2
3
   1   2   3   1   2
   4   5   6   2   1
   7   8   9   3   7
1
1726 / 966 / 198
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
21.02.2019, 15:25 5
Даю решение, может кто нибудь даст более простое решение.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
M = [[1,2,3,2,1,2,3,2], 
     [4,5,6,5,2,5,6,1], 
     [7,8,9,8,3,8,9,7]]
def printMatrix ( matrix ):        # функция печати матрицы
   for row in matrix: 
      for x in row: 
          print ( "{:4d}".format(x), end = "" ) 
      print ()
def equCol(M, col1, col2):         # функция определяющая равенство столбцов. с1, с2 - индексы смещения столбцов
    for i in range(len(M)):
        if M[i][col1] != M[i][col2]:
            return False
    return True
def delCol(M, col):                # функция удаления столбца. col - индекс смещения столбца
    for i in range(len(M)):
        del M[i][col]
 
i = 0                         # текущий индекс первого столбца
k = 0                         # корректировка смещения (количество удаленных столбцов)
while i < len(M[0]):          # пробегаем по элементам первой строки
    for j in range(i+1, len(M[0][i+1:])+k):  # пробегаем по элементам находящимся после i, ищя содинаковые
        if M[0][i] == M[0][j]: # если элементы в первой строке равны, то проверяем равенство столбцов
            #c1, c2 = i, j
            if equCol(M, i, j): # если столбцы равны, то второй столбец удаляем. 
                delCol(M, j)
                k += 1
                break     # после удаления столбца переходим к циклу while, оставляя i тем же 
                          # и перезапускаем цикл for (запускаем новый, с новым итерируемым объектом
    else:
        i += 1      # если после отработки цикла for, больше столбцов одинаковых со столбцом по индексу i 
                    # переходим к i = i+1
printMatrix(M)
1
841 / 626 / 246
Регистрация: 10.12.2016
Сообщений: 1,540
21.02.2019, 16:29 6
Цитата Сообщение от Viktorrus Посмотреть сообщение
более простое решение
через транспонирование массива
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> M = [[1,2,3,2,1,2,3,2], 
     [4,5,6,5,2,5,6,1], 
     [7,8,9,8,3,8,9,7]]
>>> def trans(arr):
    rows = len(arr)
    cols = len(arr[0])
    return [[arr[i][j] for i in range(rows)] for j in range(cols)]
 
>>> a = trans(M)
>>> out = []
>>> for i in a:
    if not i in out: out.append(i)
    
>>> out
[[1, 4, 7], [2, 5, 8], [3, 6, 9], [1, 2, 3], [2, 1, 7]]
>>> trans(out)
[[1, 2, 3, 1, 2], [4, 5, 6, 2, 1], [7, 8, 9, 3, 7]]
>>>
0
308 / 160 / 66
Регистрация: 18.01.2019
Сообщений: 449
21.02.2019, 19:02 7
Забавное решение на генераторах
Python
1
2
3
4
5
6
7
8
M = [[1,2,3,2,1,2,3,2], 
     [4,5,6,5,2,5,6,1], 
     [7,8,9,8,3,8,9,7]]
R = []
z = [[M[x][i] for x in range(len(M))] for i in range(len(M[0]))]
[R.append(x) for x in z if x not in R]
z = [[R[x][i] for x in range(len(R))] for i in range(len(R[0]))]
print(z)
1
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 150
Записей в блоге: 1
21.02.2019, 22:52  [ТС] 8
Как сделать так, чтобы чтение было из файла и запись в файл?
0
1302 / 842 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
22.02.2019, 08:04 9
N1x0n, использовать with open(file_name, type) as f:
0
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 150
Записей в блоге: 1
25.02.2019, 23:32  [ТС] 10
Пытаюсь сделать чтение из файла и запись в файл и не получается.
Вот что выдаётся.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
with open("in.txt") as file:
    M = file.read()
 
def printMatrix ( matrix ):        # функция печати матрицы
   for row in matrix: 
      for x in row: 
          print ( "{:4d}".format(x), end = "" ) 
      print ()
def equCol(M, col1, col2):         # функция определяющая равенство столбцов. с1, с2 - индексы смещения столбцов
    for i in range(len(M)):
        if M[i][col1] != M[i][col2]:
            return False
    return True
def delCol(M, col):                # функция удаления столбца. col - индекс смещения столбца
    for i in range(len(M)):
        del M[i][col]
 
i = 0                         # текущий индекс первого столбца
k = 0                         # корректировка смещения (количество удаленных столбцов)
while i < len(M[0]):          # пробегаем по элементам первой строки
    for j in range(i+1, len(M[0][i+1:])+k):  # пробегаем по элементам находящимся после i, ищя содинаковые
        if M[0][i] == M[0][j]: # если элементы в первой строке равны, то проверяем равенство столбцов
            #c1, c2 = i, j
            if equCol(M, i, j): # если столбцы равны, то второй столбец удаляем. 
                delCol(M, j)
                k += 1
                break     # после удаления столбца переходим к циклу while, оставляя i тем же 
                          # и перезапускаем цикл for (запускаем новый, с новым итерируемым объектом
    else:
        i += 1      # если после отработки цикла for, больше столбцов одинаковых со столбцом по индексу i 
                    # переходим к i = i+1
printMatrix(M)
with open("out.txt",'w') as file:
    file.write(','.join(M))
 
print(str(M))
Миниатюры
Создать новый массив, исключив из переданного массива совпадающие столбцы  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2019, 23:32
Помогаю со студенческими работами здесь

Найти минимум в первом массиве, предварительно исключив элементы, совпадающие с элементами второго массива
В чём собственно суть знаменитый диктатор Ли Сий Сын имеет в своём распоряжении армию из 105...

Из двух массивов выделить совпадающие элементы в новый массив
как найти и выписать в новый массив одинаковые элементы с массива BC и нового массива A ? ...

Дан массив B(13). Определить отрицательные элементы массива и создать из них новый массив A
Дан массив B(13). Определить отрицательные элементы массива и создать из них новый массив A.

Массив: Создать новый массив, элементами которого являются все отрицательные элементы массива C
1)Дан массив C(n). Создать новый массив, элементами которого являются все отрицательные массива C.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru