将列表中的任何列表分配给字符串脚本。

时间:2015-11-17 23:02:29

标签: python list python-3.x

我正在研究使用Python自动化无聊东西的第4章中的一个项目。这是项目的提示:

  

“练习时,编写程序以执行以下任务。逗号代码   假设你有一个这样的列表值:spam = ['apples','bananas',   'tofu','cats']编写一个将列表值作为一个函数的函数   参数并返回一个字符串,其中所有项目都以逗号分隔   以及在最后一个项目之前插入的空格。例如,   将之前的垃圾邮件列表传递给该函数将返回'apples,   香蕉,豆腐和猫。但是你的功能应该能够奏效   传递给它的任何列表值。“

我编写了一个脚本,在最后一项之前用逗号和'和'创建一个列表:但我无法弄清楚如何使脚本与传递给它的任何列表值一起工作。我已经尝试使用输入函数调用列表,但这不起作用(或者我无法工作),因为输入函数只接收字符串而不是列表名称?

这是我得到的最远的:

def listToString(list):
    if list[-1]:
        list.append('and '+str(list[-1]))
        list.remove(list[-2])
    for i in range(len(list)):
        print(''+list[i]+', ')

spam = ['apples', 'bananas', 'tofu', 'cats']
listToString(spam)

就使用input()函数而言,这里的代码我试过无济于事。我在shell编辑器中输入垃圾邮件列表并运行:

def listToString(list):
    if list[-1]:
        list.append('and '+str(list[-1]))
        list.remove(list[-2])
    for i in range(len(list)):
        print(''+list[i]+', ')

list = input("What list do you want to use?")
listToString(list)

12 个答案:

答案 0 :(得分:4)

这是一个简单的解决方案,它只使用Chapter 4已涵盖的语法:

def toString(arr):
    s = ''
    for i in range(len(arr)):
        if i > 0:
            if i == len(arr) - 1:
                # last one
                s = s + ' and '
            else:
                # second, third, ...
                s = s + ', '
        s = s + arr[i];
    return s

适用于包含任意数量元素的数组。

答案 1 :(得分:3)

我认为最简单的方法是用“和......”替换最后一个元素然后用“,”加入所有内容

def merge(list):
  return ', '.join(list[:-1] + ['and '+list[-1]])

答案 2 :(得分:1)

我相信“但是你的函数应该能够处理传递给它的任何列表值。”意味着你不应该在函数中硬编码示例列表(['apples','bananas','tofu','cats'])。

因此,最简单的函数形式是:

    var your_drink="tekila";// yes, i love tekila :)
//your_drink="";
var reverse=function(s)
{
    return s.split("").reverse().join("");
};
/*
Building objects in js.
*/ 
//first
var bartender = {
    str1: "ers",
    str2: reverse("rap"),
    str3: "amet",
    request: function(preference)
    {
        return preference+".secret word:"+this.str2+this.str3+this.str1;
    }
};
//alert result: tekila.secret word:parameters
alert(bartender.request(your_drink));
//second
var bartender = function()
{
    var str1="ers";
    var str2=reverse("rap");
    var str3="amet";
    this.request = function(preference)
    {
        return preference+".secret word:"+str2+str3+str1;
    }
};
var oBartender = new bartender();
//alert result: tekila.secret word:parameters
alert(oBartender.request(your_drink));

但是当你想要处理除字符串以外的其他类型且少于2个元素时,该函数变为:

def listToString(list):
    return "{} and {}".format(", ".join(list[:-1]]), list[-1])

答案 3 :(得分:1)

这个解决方案完全基于第4章所涵盖的基本原则。它自由地使用了第3章中提到的“结束”参数。

spam = ['apples', 'bananas', 'tofu', 'cats']
print("'", end='')
for i in range(len(spam)-1):
    print(spam[i], end=', ')
print('and '+str(spam[-1]), end='')
print("'")

答案 4 :(得分:1)

这是我的解决方案:

spam = ['zero', 'one', 'two', 'three', 'second to last', 'last']

def func(listValue):
    print('\'', end='')    # Openning single quote.
    for i in range(len(listValue[:-2])):    # Iterate through all values in the list up to second to last.
        print(str(listValue[i]), end=', ')
        continue
    print(str(listValue[-2]) + ' and ' + str(listValue[-1]) + '\'')    # Add second to last and last to string separated by 'and'. End with a single quote.

listValue = spam
func(listValue)

    # Will do for any list.

输出是:

'零,一,二,三,秒到尾和最后一次

答案 5 :(得分:0)

以下是我对此问题的解决方案。以及我对每行代码的评论。希望这可以帮助。

 spam = ['apples', 'bananas', 'tofu', 'cats']

# function should return 'apples, bananas, tofu, and cats' 

def listToString(list):

    newString = '' # create an empty string variable 

    # for loop that iterates through length of list 
    for index in range(len(list)):
        # put a comma and space after each word except the last one 
        if index in range(len(list)-1): 
            newString += list[index] + ',' + ' '
        else:
            newString += 'and' + ' ' #put the word and + a space
            #finally put the last word from the list 
            #spam in the string newString
            newString += list[index] 

       #return newString value
       return '{}'.format(newString) 

listToString(spam)

输出:

'apples, bananas, tofu, and cats'

答案 6 :(得分:0)

这是我在学习python一周后想出的解决方案:

spam = ['apples', 'bananas', 'tofu', 'cats', 'rats', 'turkeys']
group = []
for i in range(len(spam)-1):
    group.append(spam[i])
print (', '.join(group),'& ' +spam[-1])

我在新的python爱好中正在解决这个问题。

我知道我的解决方案并不像顶级解决方案那样紧凑和优雅。我基本上只是使用for语句来创建第二个列表而不是最后一个条目,然后使用print来加入该组添加“&”符号,最后是最后一项。

答案 7 :(得分:0)

这就是我想出来的。

spam = ['apples', 'bananas', 'tofu', 'cats']
spam.insert(-1, ' and')
print(spam[0] + ', ' + spam[1] + ', ' + spam[2] + ',' + spam[3] + ' ' + spam[4])

答案 8 :(得分:0)

这是我的解决方案

def converter(mylist):
    mystr=''
    if len(mylist)>1:
        for i in range(len(mylist)-1):
            mystr=mystr+str(mylist[i])+', '
        mystr=mystr+'and '+str(mylist[-1])
        print(mystr)
    elif len(mylist)==1:    
        mystr=mystr+str(mylist[0])
        print(mystr)
    else:
        print('Your list is empty')
spam = []
t='1'
while t != '':
    print('Input new value in list (Or enter nothing to stop)')
    t=str(input())
    if t != '':
        spam.append(t)
converter(spam)

答案 9 :(得分:0)

我的逗号代码版本:

spam = ['apples', 'bananas', 'tofu', 'cats']
newList = []
myString = ''

def comma(aList):
    for i in range(len(aList) - 1):
        newList.append(aList[i])
    newList.append('and ')
    myString = ', '.join(newList)
    print(myString + aList[-1])

comma(spam)

答案 10 :(得分:0)

根据作业,您必须确保“您的函数应该能够处理传递给它的任何列表值”。这意味着它必须使用0,1,1+列表值。

spam = ['green','eggs','ham']

def merge(list):
    if len(list) == 0:
        return None
    elif len(list) == 1:
        return list[0]
    else:
        return ', '.join(list[:-1] + ['and '+list[-1]])

print(merge(spam))

答案 11 :(得分:0)

这里是解决问题的简单方法:

def lst2str(spam):
    str = ''
    for word in spam:
        if word != spam[-1]:
            spacing = word + ", "
            str += spacing
        else:
            spacing = "and " + word
            str += spacing
    return str