无法从列表中连接字符串

2024-07-05 14:41:59 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行以下代码时:

size = 5

alph = 'zyxwvutsrqponmlkjihgfedcba'
lis_t = [n for n in alph]
lis = lis_t[(26-size):]

for i in range(2*size):
    if i<size:
        print("".join([n+'-' for n in lis[:i]] + lis[i] + ['-'+n for n in lis[:i]]).center(size, '-'))
    if i > size:
        print("".join([n+'-' for n in lis[:(9-i)]] + lis[i] + ['-'+n for n in lis[9-i]]).center(size, '-'))

我得到一个错误:

TypeError: can only concatenate list (not "str") to list

我不知道我的打印报表有什么问题。 它应该这样做:

--------e-------
------e-d-e------
----e-d-c-d-e----
--e-d-c-b-c-d-e--
e-d-c-b-a-b-c-d-e
--e-d-c-b-c-d-e--
----e-d-c-d-e----
------e-d-e------
--------e--------

Tags: 代码inforsizeif错误rangelist
2条回答

此表达式有两个问题:

 [n + '-' for n in lis[:i]] + lis[i] + ['-'+ n for n in lis[:i]]

首先,对于size = 5lis的长度是5个元素。但是,其索引i的范围是从09range(2*size)),因此i的近一半值将导致lis上的索引错误

其次,假设i在边界内,我们将包含三个对象:

[n + '-' for n in lis[:i]]  # a list
lis[i]  # a string
['-'+ n for n in lis[:i]]  # a list

为了实现这一点,我们需要将其表示为所有列表:

[n + '-' for n in lis[:i]] + lis[i:i+1] + ['-'+ n for n in lis[:i]]

剩下的我就交给你处理了。对我来说,这似乎是一个潜在的递归问题:

from string import ascii_lowercase as alphabet

def alphagram(size, row=1):
    if row:
        start = size - abs(row)

        letters = alphabet[size-1:start:-1] + alphabet[start:size]

        print('-'.join(letters).center(4*size-3, '-'))

        alphagram(size, row+1 if row != size else 1-row)

alphagram(6)

输出

> python3 test.py
     f     
    f-e-f    
   f-e-d-e-f   
  f-e-d-c-d-e-f  
 f-e-d-c-b-c-d-e-f 
f-e-d-c-b-a-b-c-d-e-f
 f-e-d-c-b-c-d-e-f 
  f-e-d-c-d-e-f  
   f-e-d-e-f   
    f-e-f    
     f     
> 

我们可以以@AnnZen的方式执行紧凑的迭代解决方案,但将其转换为Python;-)

from itertools import chain
from string import ascii_lowercase as lower

size = 5

for n in chain(range(1, size+1), range(size-1, 0, -1)):
    print('-'.join(lower[size-1:size-n:-1] + lower[size-n:size]).center(4*size-3, '-'))

尝试以下变体:

size = 5
alph = 'zyxwvutsrqponmlkjihgfedcba'

for n in list(range(size))+list(range(size-1))[::-1]:
    print('-'.join('-'*(size-n-1)+alph[-size:-size+n]+alph[-size+n:-size-1:-1]+'-'*(size-n-1)))

输出:

    e    
   e-d-e   
  e-d-c-d-e  
 e-d-c-b-c-d-e 
e-d-c-b-a-b-c-d-e
 e-d-c-b-c-d-e 
  e-d-c-d-e  
   e-d-e   
    e    


您还可以:

size = 5
alph = 'zyxwvutsrqponmlkjihgfedcba'

for n in list(range(size))+list(range(size-1))[::-1]:
    a,b = alph[n-size:-size-1:-1], '-'*(size-n-1)
    print('-'.join(b+a[1:][::-1]+a+b))

相关问题 更多 >