Как я могу распечатать только каждый третий индекс в Perl или Python?

Ох, затем возможно, что вызов LDAP не работает, потому что Вы не могли бы быть в среде Active Directory. Если это верно, затем каждая из Ваших машин ответственна за свое собственное хранилище идентификационных данных. И Ваш первый пример кода не работает по сети, потому что машина, на которой Вы выполняете свой код, не знает, как разрешить SID, который только имеет смысл на удаленной машине.

действительно необходимо проверить, являются ли машины частью Active Directory. Вы знали бы это во время процесса входа в систему. Или можно проверить щелчок правой кнопкой по "My Computer", выбрать "Свойства", вкладку "Computer Name", затем видеть, является ли компьютер частью домена.

6
задан gobernador 11 June 2012 в 22:45
поделиться

8 ответов

Python

print list[::3] # print it
newlist = list[::3] # copy it

Perl

for ($i = 0; $i < @list; $i += 3) {
    print $list[$i]; # print it
    push @y, $list[$i]; # copy it
}
12
ответ дан 8 December 2019 в 02:02
поделиться

Perl:

То же, что и в ответе draegtun, но с использованием переменной count:

my $i;
my @new = grep {not ++$i % 3} @list;
16
ответ дан 8 December 2019 в 02:02
поделиться

Perl 5.10 новые переменные состояния очень удобны здесь:

my @every_third = grep { state $n = 0; ++$n % 3 == 0 } @list;


Также обратите внимание, что вы можете предоставить список элементов для срезания:

my @every_third = @list[ 2, 5, 8 ];  # returns 3rd, 5th & 9th items in list

Вы можете динамически создавать это список срезов с использованием карты (см. отличный ответ от Gugod) или подпрограммы:

my @every_third = @list[ loop( start => 2, upto => $#list, by => 3  ) ];

sub loop {
    my ( %p ) = @_;
    my @list;

    for ( my $i = $p{start} || 0; $i <= $p{upto}; $i += $p{by} ) {
        push @list, $i;
    }

    return @list;
}


Обновление:

Что касается комментария runrig ... это «один способ» заставить его работать внутри цикла:

my @every_third = sub { grep { state $n = 0; ++$n % 3 == 0 } @list }->();
9
ответ дан 8 December 2019 в 02:02
поделиться

Python:

for x in a[::3]:
   something(x)
8
ответ дан 8 December 2019 в 02:02
поделиться

В Perl:

$size = @array; 
for ($i=0; $i<$size; $i+=3)  # or start from $i=2, depends what you mean by "every third index"
{  
        print "$array[$i] ";  
} 
3
ответ дан 8 December 2019 в 02:02
поделиться

Perl:

# The initial array
my @a = (1..100);

# Copy it, every 3rd elements
my @b = @a[ map { 3 * $_ } 0..$#a/3 ];

# Print it. space-delimited
$, = " ";
say @b;
9
ответ дан 8 December 2019 в 02:02
поделиться

Вы можете создать фрагмент на Perl.

my @in = ( 1..10 );

# need only 1/3 as many indexes.
my @index = 1..(@in/3);

# adjust the indexes.
$_ = 3 * $_ - 1 for @index;
# These would also work
# $_ *= 3, --$_ for @index;
# --($_ *= 3) for @index

my @out = @in[@index];
5
ответ дан 8 December 2019 в 02:02
поделиться
@array = qw(1 2 3 4 5 6 7 8 9);
print @array[(grep { ($_ + 1) % 3 == 0 } (1..$#array))];
1
ответ дан 8 December 2019 в 02:02
поделиться