在我的question a few minutes ago中,我问到当字符串存储在数组中时如何使用python的ngIf
打印。
然后答案显然是打开列表,像这样:
str.format
但是,如果我始终希望中心六边形已打印在数组的第一项中:# note that I had to play with the whitespace because the {} text is 2 characters, while its replacement is always one
hex_string = r'''
_____
/ \
/ \
,----( {} )----.
/ \ / \
/ {} \_____/ {} \
\ / \ /
\ / \ /
)----( {} )----(
/ \ / \
/ \_____/ \
\ {} / \ {} /
\ / \ /
`----( {} )----'
\ /
\_____/
'''
letters = list('1234567')
print(hex_string.format(*letters))
,那么如何在不保留数组的同时保留第一个数组元素的第4个打印字符串的情况下混合打开数组呢?
我愿意接受其他打印类型,例如f字符串。
例如:
letters[0]
这样我的输出实际上是这样的:
print(hex_string.format(letters[3], letters[1], letters[2], letters[0], letters[4], letters[5], letters[6]))
答案 0 :(得分:5)
您可以使用.format()
尝试类似的操作:
a = '123'
print('{2}, {0}, {1}'.format(*a))
将打印3, 1, 2
使用这种方法,您的首字母hex_string
将“自我记录”您数组中的字母的确切位置。
答案 1 :(得分:5)
如果您事先知道所需的订单:
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <errno.h>
void h(int Sig){}
int main(int argc, char *argv[])
{
sigaction(SIGQUIT, &(struct sigaction){.sa_handler=h}, 0);
int cont, status, times=1;
pid_t pid;
for(cont = 0; cont < times; cont++)
{
pid = fork();
if(pid == 0)
execvp(argv[1],argv+1);
else if (pid >0) {
// retry on EINTR
int rc; do{ rc=wait(&status); }while(0>rc && EINTR==errno);
if (0>rc) return perror("wait"),1;
if (WIFSIGNALED(status)){
if (WCOREDUMP(status))
printf("Core dump generado\n");
}
}
}
return 0;
}
您可以将其应用于字母:
letters = list('1234567')
reordering = [4,2,3,1,5,4,7]
输出:
new_letters = [letters[index-1] for index in reordering]
现在您可以创建格式化的字符串:
['4', '2', '3', '1', '5', '4', '7']
答案 2 :(得分:1)
我认为最简单的方法是将字母更改为list('4231567')
,这样您就可以混合拆包以及避免在数组中的元素之间移动
hex_string = r'''
_____
/ \
/ \
,----( {} )----.
/ \ / \
/ {} \_____/ {} \
\ / \ /
\ / \ /
)----( {} )----(
/ \ / \
/ \_____/ \
\ {} / \ {} /
\ / \ /
`----( {} )----'
\ /
\_____/
'''
letters = list('4231547')
print(hex_string.format(*letters))
输出将为
_____
/ \
/ \
,----( 4 )----.
/ \ / \
/ 2 \_____/ 3 \
\ / \ /
\ / \ /
)----( 1 )----(
/ \ / \
/ \_____/ \
\ 5 / \ 6 /
\ / \ /
`----( 7 )----'
\ /
\_____/
或者在下面提出的想法上扩展,使用str.format
并定义索引以解压缩原始字符串,但在不同位置分配不同的项目
hex_string = r'''
_____
/ \
/ \
,----( {3} )----.
/ \ / \
/ {1} \_____/ {2} \
\ / \ /
\ / \ /
)----( {0} )----(
/ \ / \
/ \_____/ \
\ {4} / \ {5} /
\ / \ /
`----( {6} )----'
\ /
\_____/
'''
letters = list('1234567')
print(hex_string.format(*letters))
从某种意义上来说,这也为您提供了更好的参考点,因为您知道{0}
将包含列表的第一项,即1
输出将与上面相同