0
import sys
a=sys.stdin.read(1)
l=list(a)
print l

def genSubset(l):
    res=[]
    if len(l)==0:
        return [[]]
    smaller=genSubset(l[:-1])
    extra=l[-1]
    new=[]
    for small in smaller:
        new.append(small+extra)
    return smaller+ new
print genSubset(l)

这是我的代码现在我如何将输入作为列表并将其提供给函数。每次它显示无法将 str 连接到列表的错误时,所以想知道如何输入列表。我已经用 input() 和raw_input(),然后使用列表函数,但问题仍然存在

4

2 回答 2

0

试试这个修改:

l = input("INPUT: ")
#print type(l) # list
#print l

def genSubset(l):
    res=[]
    if len(l)==0:
        return [[]]
    smaller=genSubset(l[:-1])
    extra=l[-1]
    new=[]
    for small in smaller:
        #print type(small) # list
        #print type(extra) # int
        new.append(small + [extra])
    return smaller+ new
print genSubset(l)

例子

>>>
INPUT: [1, 2, 3]
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
于 2013-10-31T04:12:39.007 回答
0

在代码extra中是字符串。

>>> l = ['1', '2', '3']
>>> extra = l[-1]
>>> extra
'3'

要获取最后一项的列表,请使用切片表示法:

>>> extra = l[-1:]
>>> extra
['3']

def genSubset(l):
    res=[]
    if len(l)==0:
        return [[]]
    smaller=genSubset(l[:-1])
    extra=l[-1:] # <---
    new=[]
    for small in smaller:
        new.append(small+extra)
    return smaller+ new

>>> genSubset(['1', '2'])
[[], ['1'], ['2'], ['1', '2']]

顺便说一句,使用sys.stdin.read(1),您总是会得到一个长度为 1(或 0)的字符串。

于 2013-10-31T04:12:52.823 回答