簡體   English   中英

連接列表中的字符串時遇到問題

[英]Having trouble concatenating strings from lists

當我運行以下代碼時:

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

試試這個變化:

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)))

Output:

--------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))

這個表達式有兩個問題:

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

首先,對於size = 5lis的長度是 5 個元素。 但是,它的索引i的范圍是從09 ( range(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]]

讓你來整理rest。 對我來說,這似乎是一個潛在的遞歸問題:

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)

OUTPUT

> 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, '-'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM