使用python3进行字符串格式打印:有时*从解压缩数组中打印

时间:2019-05-11 17:17:34

标签: python python-3.x printing string-formatting python-3.7

在我的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]))

3 个答案:

答案 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

输出将与上面相同