制作列表副本但有以下更改:

时间:2016-11-03 23:28:31

标签: python

我正在编写一个函数,该函数将列表作为参数但返回列表的副本并进行以下更改: •字符串将所有字母转换为大写字母 •整数和浮点数的值增加1 •布尔值被否定(False变为True,True变为False) •列表被替换为“列表”一词 此函数应保持原始输入不变

这是我到目前为止所做的,但我不知道如何将所有这些添加到空列表中,这是我的程序:

name = [1, 2, "abc123", True, [1, 2, 3]]

new_list = [ ]

for element in name:

    if(type(element) == str):
        for i in element:
            if(i.isalpha()):
                element = element.upper()
        new_list += element
        #print(new_list)
        print(element)

    elif(type(element) == int):
        element = element + 1
        print(element)

    elif(type(element) == bool):
        print(not(element))
    else:
        print("list")

2 个答案:

答案 0 :(得分:2)

如果您首先要创建一个处理个人案例的函数,这会容易得多。

def convert(item):
    if isinstance(item, str):
        return item.upper()
    if isinstance(item, bool):
        return not item
    if isinstance(item, list):
        return "List"
    if isinstance(item, int) or isinstance(item, float):
        return item + 1
    raise ValueError("invalid type: {}".format(type(item)))

完成此操作后,我们只需应用map

即可
map(convert, my_list)

如果您迫切需要它作为列表而不仅仅是可迭代的,请将其转换为列表:

list(map(convert, my_list))

答案 1 :(得分:1)

你是如此接近并在最后一道障碍中摔倒了。只需使用append添加到空列表中。

name = [1, 2, "abc123", True, [1, 2, 3]]

new_list = [ ]

for element in name:

    if(type(element) == str):
        for i in element:
            if(i.isalpha()):
                element = element.upper()

        new_list.append(element)

    elif(type(element) == int):
        element = element + 1
        new_list.append(element)

    elif(type(element) == bool):
        new_list.append(not element)
    else:
        new_list.append('list')