TWOfish Asked:2020-12-16 01:42:59 +0000 UTC2020-12-16 01:42:59 +0000 UTC 2020-12-16 01:42:59 +0000 UTC 字符串中字符的顺序交替 772 不同任意长度的字符串,不同的字符。如何将字符串的字符移动一个字符并依次遍历所有选项以获得字符串的输出1a2b3c: 1a2b3c a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 需要使用 Unix ToolBox、Python、Perl 在终端的管道中启用类似的脚本。 python 10 个回答 Voted MBo 2020-12-16T02:31:24Z2020-12-16T02:31:24Z s = "1a2b3c" for _ in range(len(s)): print(s) s = s[1:] + s[0] 1a2b3c a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 Best Answer MarianD 2020-12-16T06:48:42Z2020-12-16T06:48:42Z 在 Python 上: import collections dq = collections.deque("1a2b3c") for __ in range(len(dq)): print("".join(dq)) dq.rotate(-1) 结论: 1a2b3c a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 解释: 类型deque(双队列)的对象有一个方法rotate()(旋转),当它的参数是 时,它可以完全按照您的意愿行事-1。 (正数 - 向右旋转,负数 - 向左旋转。) 因此它dq包含给定字符串的单个字符,您需要"".join()在打印之前将它们转换为字符串 ( )。 S. Nick 2020-12-16T02:37:02Z2020-12-16T02:37:02Z val = '1a2b3c' [ val[i:len(val)]+val[0:i] for i in range(len(val))] ['1a2b3c', 'a2b3c1', '2b3c1a', 'b3c1a2', '3c1a2b', 'c1a2b3'] PinkTux 2020-12-16T23:02:57Z2020-12-16T23:02:57Z #!/usr/bin/perl use Modern::Perl; my @chars = qw(1 a 2 b 3 c); # OR # my $s = '1a2b3c' # или из любого источника; # my @chars = split //, $s; while(1) { say @chars; push @chars, shift @chars; } usr13 2020-12-18T21:15:07Z2020-12-18T21:15:07Z use strict; use warnings; my $str = '1a2b3c'; my $len = length($str) -1; for(0..$len){ $str =~ s/(.)(.{$len})/$2$1/; print "$str\n"; } a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 1a2b3c 69 420 1970 2020-01-07T14:07:08Z2020-01-07T14:07:08Z 重击: echo "a1b2c3" | xargs -i@ bash -c 'seq $(($(expr length @-))) | sed -z "s/[0-9]*\n/@/g;s/$/\n/" | grep -oE .{$(($(expr length @-)))}' 无法正常工作: a1b2c3a 1b2c3a1 b2c3a1b 2c3a1b2 c3a1b2c 3a1b2c3 An0ther0ne 2020-11-29T14:30:54Z2020-11-29T14:30:54Z 老派风格:) #!/usr/bin/perl $chars = '1a2b3c'; my @chars = split(//,$chars); $\="\n"; foreach $i (@chars){ print @chars; push @chars, shift @chars; } An0ther0ne 2020-11-29T14:47:49Z2020-11-29T14:47:49Z 另一个 Perl 变体 => 使用 substr() 函数: #!/usr/bin/perl $chars = '1a2b3c'; $\="\n"; for (my $i=0;$i<length($chars);$i++){ print $chars = substr($chars,1).substr($chars,0,1); } 结论: a2b3c1 2b3c1a b3c1a2 3c1a2b c1a2b3 1a2b3c An0ther0ne 2020-11-29T14:57:20Z2020-11-29T14:57:20Z Perl 使用正则表达式(已经完成,但可能更简单): #!/usr/bin/perl $chars = '1a2b3c'; $\="\n"; for (my $i=0;$i<length($chars);$i++){ $chars=~s/(.)(.+)/\2\1/; print $chars; } 结论类似。 An0ther0ne 2020-11-29T15:10:55Z2020-11-29T15:10:55Z Python: s = "1a2b3c" for i in range(len(s)): s=print(s) or s[1:]+s[:1] 或者在一行中: print([(s[i+1:len(s)]+s[0:i+1]) for i in range(len(s))])
在 Python 上:
结论:
解释:
类型
deque(双队列)的对象有一个方法rotate()(旋转),当它的参数是 时,它可以完全按照您的意愿行事-1。(正数 - 向右旋转,负数 - 向左旋转。)
因此它
dq包含给定字符串的单个字符,您需要"".join()在打印之前将它们转换为字符串 ( )。重击:
无法正常工作:
老派风格:)
另一个 Perl 变体 => 使用 substr() 函数:
结论:
Perl 使用正则表达式(已经完成,但可能更简单):
结论类似。
Python:
或者在一行中: