Python TXT-поиск файлов не работает должным образом

Сколько существует комбинаций?

Итак, сначала вопрос, сколько комбинаций есть? И ответ заключается в том, что вам нужно умножить количество каждого массива друг на друга.

So (c = amount1):

carray 1 * carray 2 * ... * carray n

И конкретный для вашего примера:

carray 1 * carray 2 * carray 3 = 2 * 2 * 2 = 8

* 1 И если вы задаетесь вопросом, почему я выбрал c для суммы, из-за функции count () в php

Получение всех комбинаций вместе

Как мы получите все комбинации с количеством массивов, которые у нас есть?

Пролистываем все наши комбинации, которые у нас уже есть (начиная с одной комбинации, «пустая комбинация» ($combinations = [[]];)) , и для каждой комбинации мы переходим через наш следующий массив данных и объединяем каждую комбинацию с каждым входным данным в новую комбинацию.

Теперь мы делаем это, пока не получим желаемую длину для каждой комбинации.

Итак, в качестве примера:

Array with the elements (Empty array is '[]'):

[
    [1, 2],
    [3, 4]
]

                               //↓ new combinations for the next iteration
                               │
array NAN*:

    Combinations:
                  - []         │  -> []
                                  │
array 1 [1,2]:      ┌─────────────┤
                    │             │
    Combinations:   v             v
                  - []    + 1  │  -> [1]  
                  - []    + 2  │  -> [2]   
                                  │
array 2 [3,4]:      ┌─────────────┤
                    │             │
    Combinations:   v             v
                  - []    + 3  │  -> [3]
                  - []    + 4  │  -> [4]
                  - [1]   + 3  │  -> [1,3]  //desired length 2 as we have 2 arrays 
                  - [1]   + 4  │  -> [1,4]  //desired length 2 as we have 2 arrays 
                  - [2]   + 3  │  -> [2,3]  //desired length 2 as we have 2 arrays 
                  - [2]   + 4  │  -> [2,4]  //desired length 2 as we have 2 arrays    
                               //↑ All combinations here

* NAN: не число

Итак, как вы можете видеть в выше, мы теперь имеем все комбинации с длиной количества всех массивов, которые у нас есть.

. Но чтобы получить только комбинации с нужной длиной, мы переписываем массив результатов на каждую итерацию, так что на end, только комбинации с ожидаемой длиной находятся в массиве результатов.

Код:

<?php

    $array1 = array(1,2);
    $array2 = array(4,5);
    $array3 = array(7,8);


    $combinations = [[]];
    $data = [
        $array1,
        $array2,
        $array3,
    ];
    $length = count($data);

    for ($count = 0; $count < $length; $count++) {
        $tmp = [];
        foreach ($combinations as $v1) {
            foreach ($data[$count] as $v2)
                $tmp[] = array_merge($v1, [$v2]);

        }
        $combinations = $tmp;
    }

    print_r($combinations);

?>
Выход

:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 4
            [2] => 7
        )
    //...
    [7] => Array
        (
            [0] => 2
            [1] => 5
            [2] => 8
        )

)

Для ассоциативных массивы, вам нужно сделать лишь небольшую модификацию:

  1. Сначала назначьте ключи массивов переменной array_keys(), например
    $keys = array_keys($data);
    
  2. Используйте клавиши во втором цикле foreach для доступа к массиву данных, значит: от
    foreach ($data[$count] as $v2)
    
    до:
    foreach ($data[$keys[$count]] as $v2)
0
задан Andronicus 2 March 2019 в 14:46
поделиться

2 ответа

Единственный способ, которым это могло бы произойти в этом коде, - это если циклу for нечего перебирать. Это будет означать, что оператор if никогда не выполняется, а user_new никогда не определяется.

Убедитесь, что в accuracy.txt есть хотя бы одна строка, иначе цикл никогда не запустится, поскольку нет строк, через которые можно пройти.

Если отсутствие строк в текстовом файле неизбежно, рассмотрите возможность проверки длины файла с помощью чего-нибудь такого, как:

if search.read() == "":
    user_new = False
0
ответ дан Joe Allen 2 March 2019 в 14:46
поделиться

Время от времени проблема была accuracy.txt пустой, из-за чего цикл никогда не выполнялся и user_new никогда не определялся. Спасибо @Joe Allen за ответ.

0
ответ дан Sly 2 March 2019 в 14:46
поделиться
Другие вопросы по тегам:

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