如何创建一个添加'和'的功能到传递给它的任何列表的-1点

时间:2016-08-17 05:50:48

标签: python-3.x

我正在尝试做一些练习计划。我正在尝试创建一个添加'和'到传递给它的任何列表的-1点。 我知道我必须做什么,但我不知道该怎么做。

使用插件我需要插入'和'在元素-1,所以像modList.insert(-1,x) 其中x是我要添加任何行的地方 (-1 + str('和')) 但这不起作用。

这是我到目前为止所做的:

def modList(someList):
    someList.insert(-1, 'and')
    print(someList)

spam = ['Dog','Cat','Bat','Mouse']
modList(spam)

输出:['Dog', 'Cat', 'Bat', 'and', 'Mouse']

所需的输出:['Dog, Cat, Bat, and Mouse']

非常感谢任何帮助...

3 个答案:

答案 0 :(得分:2)

如果您不介意修改列表本身:

def insert_end(li):
    # note that this function is inplace, so no need to 'return li'
    li[-1] = 'and ' + li[-1]

li = ['a', 'b', 'c']
insert_end(li)
print(li)
>> ['a', 'b', 'and c']

如果你想要的输出是一个字符串(没有修改列表,那么需要return输出的字符串):

def insert_end(li):
    return ', '.join(string for string in li[:-1]) + ' and ' + li[-1]

li = ['a', 'b', 'c']
print(insert_end(li))
>> 'a, b and c'

为了获得您发布的实际输出(包含1个字符串的列表),只需返回上一个示例中的列表:

def insert_end(li):
    return [', '.join(string for string in li[:-1]) + ' and ' + li[-1]]

li = ['a', 'b', 'c']
print(insert_end(li))
>> ['a, b and c']

更新1 正如@StevenSummers在评论中提到的那样,您只需', '.join(li[:-1])而不是', '.join(string for string in li[:-1])。它的行为完全一样。


更新2

根据评论中的要求,对行', '.join(string for string in li[:-1]) + ' and ' + li[-1]

的进一步说明


string for string in li[:-1]

这将返回一个生成器对象,该对象迭代列表并返回除最后一个元素之外的所有元素。你可以在这里看到它:

li = ['a', 'b', 'c']
generator = (string for string in li[:-1])
for s in generator:
    print(s)
>> 'a'
   'b'

现在我们在该生成器对象上调用', '.joinjoin返回一个字符串,该字符串是通过在它作为参数接收的iterable元素之间插入调用它的字符串而创建的。

现在我们有:

li = ['a', 'b', 'c']
generator = (string for string in li[:-1])
# remember that generator is going to return ('a', 'b')
print(', '.join(generator))
>> 'a, b'  # note that we get a string back, with `, ` between the elements in generator

下一部分非常简单。 我们只需要将'and '和列表的最后一个元素添加到输出字符串中:

'a, b' + ' and ' + li[-1]
>> 'a, b and c`

答案 1 :(得分:0)

您可以尝试:

var app=angular.module('spesh',[]);
app.controller('formController',function($scope,$http){
  $scope.addTimeDetails=function(){
    console.log('time',$scope.time,$scope.time1);
  }
})
app.directive('timePicker', [function () {
        return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
            model: '=ngModel'
        },
        link: function ($scope, element, attrs, ngModelCtrl) {
            element.timepicker();
            element.on('changeTime', function () {
              $scope.$apply(function () {
                $scope.model = element.val();
              });
            });

        }
    }
}]);

答案 2 :(得分:0)

这是你正在寻找的吗?

def modList(spam):
    var = 'and ' + spam.pop()
    spam.append(var)
    spamstr = ', '.join(spam)
    return spamstr