4 回答

TA貢獻1802條經(jīng)驗 獲得超6個贊
a是 a list,如果你想訪問list/的任何項目,string那么你需要一個索引,你喂什么是 alist所以它不會接受這樣的。
p = "asfdasdf"
a = [1,3,6]
output = []
for i in a:
output.append(p[i])
print(' '.join(output))

TA貢獻1909條經(jīng)驗 獲得超7個贊
我不完全確定我理解你的問題,但也許你正在尋找這樣的東西:
print([p[x] for x in a])
--> ['s', 'd', 'd']
p這會在使用 in 的索引值時創(chuàng)建字符的列表理解,a并將其打印在同一行中。
如果你想要它作為一個字符串:
print(' '.join([p[x] for x in a]))
--> s d d
還請記住一點:代碼的整體時間復(fù)雜度不是行數(shù)的函數(shù)。換句話說,行數(shù)更少并不意味著代碼更高效(而對于 Python,通過嘗試使其更緊湊來降低代碼效率很容易)。

TA貢獻1887條經(jīng)驗 獲得超5個贊
你print(p[a])不是 Python 中的有效語句。如果您能夠用任何其他語言做同樣的事情,那是因為該語言的特殊功能。在 Python 中,我們也有一些特別的東西。我們稱它們?yōu)閘ist-comprehensions。
首先讓我們學(xué)習(xí),如何從您的字符串中獲取字符串字符p。
>>> p = "asfdasdf"
>>> p
'asfdasdf'
>>> a = [1,3,6]
>>> p[a[1]]
's'
>>> p[a[3]]
'd'
>>> p[a[6]]
'd'
現(xiàn)在下一步如果要構(gòu)造一個字符串這個值列表(['s', 'd', 'd'])。之后構(gòu)建一個帶有分隔符的字符串作為空格()。下面是你平時的做法
my_list = []
for a_i in a:
my_list.append(p[a_i])
my_list.append(" ") # adding spaces
# At the end of this above loop, my_list look like ['s', ' ', 'd', ' ', 'd', ' ']
str_out = ""
# now my_list[:-1], look like ['s', ' ', 'd', ' ', 'd'] # exclude last value
for each in my_list[:-1]:
str_out = str_out + each
print(str_out)
# print `s d d`
列表理解
現(xiàn)在,讓我們使用一個列表推導(dǎo)來生成這個 list( [p[each] for each in a]) 并將這個輸出直接傳遞給一個內(nèi)置函數(shù)。join將負責在 list( ['s', ' ', 'd', ' ', 'd']) 中的字符串變量之間添加空格,然后將它們組合成s d d
>>> ' '.join([p[each] for each in a])
's d d'
>>>
隨著人們習(xí)慣了 python,這些變得非常方便。也少有顯著優(yōu)勢
易于閱讀
更小的代碼 => 更少的編譯時間,更少的維護,更少的錯誤機會
更少的臨時變量

TA貢獻1786條經(jīng)驗 獲得超13個贊
您的代碼是錯誤的,因為如果計算機讀取,它將變?yōu)?/p>
p[[1, 3, 6]]
這是非法的,在 Python 中不可用,但你可以使用 for 語句!你需要使用:
使用for語句
p = "asfdasdf"
a = [1, 3, 6]
for x in a:
print(p[x], end='')
print('')
但這是一種愚蠢的方式,所以不要使用for語句,而是使用列表推導(dǎo)
p = "asfdasdf"
a = [1, 3, 6]
print(''.join(p[x] for x in a))
添加回答
舉報