[英]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 = 5
, lis
的長度是 5 個元素。 但是,它的索引i
的范圍是從0
到9
( 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.