Вот мой код в python, который проверяет, находятся ли меньшие подмассивы в большом массиве внутри одного из подмассивов. Я не знаю, который является самым большим индексом sub-array, поэтому я не могу сравнивать его с индексом. Может быть, хорошо разобраться. Но если есть более одного большого подмассива? то есть я хочу, чтобы в окончательном массиве только те большие вложенные массивы, которые содержат меньшие подмассивыКак проверить, является ли массив массив массивным?
[[1, 2, 3], [4, 5, 6], [1, 2, 3, 4, 5, 6], [7,8], [9, 10, 11, 12], [7, 8, 9, 10, 11, 12]]
Во-вторых, то, что я должен делать, если порядок элементов может быть случайным, например: [[1, 3, 2], [4, 5, 6], [1, 2, 3, 4, 5, 6], [7,8], [9, 10, 11, 12], [7, 8, 9, 10, 11, 12]]
Вот мой код:
arr1 = [[1, 2, 3], [4, 5, 6], [1, 2, 3, 4, 5, 6], [7,8], [9, 10, 11, 12], [7, 8, 9, 10, 11, 12]]
arr2 = []
arrInd = 0
arrInd2 = len(arr1)
for k in arr1:
for n in reversed(arr1):
if set(n).issubset(set(k)):
arr2.append(k)
print(arr2)
Я хотел бы видеть в качестве вывода:
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
Но у меня есть:
[[4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [7, 8], [9, 10, 11, 12], [7, 8, 9, 10, 11, 12], [7, 8, 9, 10, 11, 12], [7, 8, 9, 10, 11, 12]]
UPDATE
Потому что там было так много хороших вопросов, которые я должен добавить еще некоторые детали.
1) Существует множество массивов: arr1 = [[]]
2) он содержит некоторые подмассивы как эти те [1, 2, 3], [4, 5, 6], [4, 6, 5], [7, 8, 9, 10, 11, 12], [11, 12, 13, 14, 15], [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13, 14, 15], [111, 222, 333], [444, 555], [777, 888], [111, 222, 333, 444, 555], [111, 222, 333, 444, 555, 777, 888], [1000, 2000, 3000]
Что такое возможно? 1) Внутри массивов порядок может быть разным: [4, 5, 6], [4, 6, 5]
и [1, 2, 3, 4, 5, 6]
, поэтому он не будет численным, на самом деле в реальных данных (в настоящее время я тестирую) могут быть даже буквы, такие как, B81
; 2) Существуют большие и малые массивы, всегда есть самая большая (или несколько), которая никогда не пересекается с другими крупнейшими массивами, поэтому здесь [1, 2, 3, 4, 5, 6]
и [7, 8, 9, 10, 11, 12, 13, 14, 15]
- они не могут пересекаться друг с другом, но они содержат некоторые мини- массивы; 3) Каждая большая подматрица содержит некоторые более мелкие. Однако не все из них и некоторые небольшие массивы могут существовать независимо. Например: [1, 2, 3, 4, 5, 6]
содержит [1, 2, 3], [4, 5, 6], [4, 6, 5]
, но он не содержит [7, 8, 9, 10, 11, 12], [11, 12, 13, 14, 15]
или [111, 222, 333]
; 4) Также могут быть промежуточные «большие массивы»: [111, 222, 333, 444, 555]
меньше по сравнению с [111, 222, 333, 444, 555, 777, 888]
, поэтому первый из них [111, 222, 333, 444, 555]
должен быть исключен. 5 *) Я хотел бы добавить большие массивы arr2
(окончательный массив) без малого один раз, за исключением случая *** [1000, 2000, 3000]
к arr2
(окончательный массив)
Что мой код должен был делать? Он должен был пройти через arr1 и выступают против различных элементов друг с другом для того, чтобы обнаружить, содержит ли п элемента к элементу и наоборот, как она идет от начала до конца for k in arr1:
и от конца к началу for n in reversed(arr1):
ОБНОВЛЕНИЕ 2 Сравнение длин!
if len(n) < len(k):
for k in arr1:
for n in reversed(arr1):
if len(n) < len(k):
if set(n).issubset(set(k)):
arr2.append(k)
И это гораздо ближе.На самом деле это почти то, но это делает дубликаты, судя по количеству которых, кажется, что проблема порядка (1) не является проблемой на всех:
arr2 = [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13, 14, 15], [7, 8, 9, 10, 11, 12, 13, 14, 15], [111, 222, 333, 444, 555], [111, 222, 333, 444, 555], [111, 222, 333, 444, 555, 777, 888], [111, 222, 333, 444, 555, 777, 888], [111, 222, 333, 444, 555, 777, 888], [111, 222, 333, 444, 555, 777, 888]]
Это, конечно, можно начать удаление дубликатов и запустить arr2 таким образом, чтобы избавиться от [111, 222, 333, 444, 555]
, который фактически является частью [111, 222, 333, 444, 555, 777, 888]
, но должен быть более элегантный способ.
Непонятно, чего именно вы хотите достичь. –
Я хочу иметь в arr2 только те большие массивы, которые содержат более мелкие –
Я не вижу 'циклов', определенных где угодно. – KSFT