如何在列表中创建子列表?

时间:2018-12-16 11:14:40

标签: python python-3.x list sublist

我对如何在python中创建子列表有疑问。

我想输入3个值,并将它们添加到带有函数的子列表中,并调用3次。

但是出于某种原因,我无法创建子列表。

我希望我的输出是这样的: [[['string1','string2','string3'],[10、20、30],[2.7、5.5、12.2]]

word = input("add text (end stops): ")
list=[]
while word != 'end':
    a = int(input("add int: "))
    b = float(input("add float: "))
    word = input("add text (end stops): ")

def fixlist(lst, st):
    list=[]
    for item in lst:
        list.append(lst)
        for y in item:
            list.append(st[item])
    return [lst, st]


print(fixlist(list, word))
print(fixlist(list, a))
print(fixlist(list, b))

这是我的输出

[[], 'end']
[[], 10]
[[], 5.5]

2 个答案:

答案 0 :(得分:1)

您的代码中有几个问题:

list=[]

如Patrick所言,请勿将关键字用作变量名。

while word != 'end':
    a = int(input("add int: "))
    b = float(input("add float: "))
    word = input("add text (end stops): ")

执行此代码时,您会不断获得新的输入,但是您将丢弃旧的输入。如果希望以后使用,则需要存储较旧的输入。例如:

word = input("add text (end stops): ")
all_string_inputs = []
while word != 'end':
    all_string_inputs.append(word)
    word = input("add text (end stops): ")

在上面的代码中,我将较旧的输入存储在all_string_input列表中。
如果只想输入3个值,请不要使用一段时间。

def fixlist(lst, st):
    list=[]
    for item in lst:
        list.append(lst)
        for y in item:
            list.append(st[item])
    return [lst, st]

您打算在这里做什么?在上面的代码中,您遍历lst中的项目,对于这些项目,您的输入是一个空列表。最后,您返回您的输入。无需更改。另请注意,st[item]未定义,因为item不一定是整数。

如果希望附加到函数内的现有列表,则需要使用以下方案:

def fixlist(lst, st):
    lst.append(st)

以上内容将修改现有列表。如果要创建新列表,则需要返回新列表:

def fixlist(lst, st):
    new_list = lst+[st]
    return new_list

上面的代码将使用lstst创建一个新列表,并将其返回。

尝试立即修复您的代码,如果仍然无法解决,请尝试修改问题。

答案 1 :(得分:0)

print("Please provide data!\n-----------------\n")

data = [
    [], [], []
]

while True:
    line = input("Enter: ")
    line = line.split(" ")

    if line[0].lower() == "end":
        print("\nEntering ended.\n")
        break

    data[0].append(line[0])
    data[1].append(int(line[1]))
    data[2].append(float(line[2]))

print(data)