我创建了一个列表,但是在打印时,我需要在列表中的最后一项之前添加“ and”。示例:
mylist = ['me', 'you', 'him', 'her']
当我打印出列表时,我希望它看起来像这样:
me, you, him and her.
我不希望显示'
,[
或]
。
我当前正在使用:
mylist = ['me', 'you', 'him', 'her']
print (','.join.(mylist))
,但输出为me,you,him,her
。我需要显示me, you, him and her
。
答案 0 :(得分:2)
与str.join
两次使用rsplit
:
mylist = ['me', 'you', 'him', 'her']
new_str = ' and '.join(', '.join(mylist).rsplit(', ', 1))
print(new_str)
输出:
me, you, him and her
这适用于空列表或单元素列表:
new_str = ' and '.join(', '.join([]).rsplit(', ', 1))
print(new_str)
# None
new_str = ' and '.join(', '.join(['me']).rsplit(', ', 1))
print(new_str)
# me
答案 1 :(得分:2)
我是明确性的忠实拥护者,所以我可以这样写:
def human_list(items):
# Empty list? Empty string.
if not items:
return ''
# One-item list? Return that item.
if len(items) == 1:
return items[0]
# For everything else, join all items *before* the last one with commas,
# then add ' and {last_item}' to the end.
return ', '.join(items[:-1]) + ' and ' + items[-1]
# Demonstrate that this works the way we want
assert human_list([]) == ''
assert human_list(['spam']) == 'spam'
assert human_list(['spam', 'eggs']) == 'spam and eggs'
assert human_list(['one', 'two', 'three']) == 'one, two and three'
assert human_list(['knife', 'fork', 'bottle', 'a cork']) == 'knife, fork, bottle and a cork'
答案 2 :(得分:1)
您可以执行以下操作:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<button type="submit">Submit</button>
</form>
答案 3 :(得分:0)
助手功能可能是一个好方法,因为它可以集中控制,这意味着您可以修复错误或轻松进行改进(例如处理空列表之类的极端情况)。由于它只包含类似readableList(myList)
之类的内容,因此它也使主代码更易于阅读。
以下功能是您所需要的:
def readableList(pList):
if len(pList) == 0: return ""
if len(pList) == 1: return pList[0]
return ", ".join(pList[:-1]) + ' and ' + pList[-1]
对于测试工具,您可以使用类似以下内容的东西:
for myList in [['me', 'you', 'him', 'her'], ['one', 'two'], ['one'], []]:
print("{} -> '{}'".format(myList, readableList(myList)))
给出输出:
['me', 'you', 'him', 'her'] -> 'me, you, him and her'
['one', 'two'] -> 'one and two'
['one'] -> 'one'
[] -> ''
请注意,->
右侧的那些引号是由我的测试工具添加的,以便您可以看到字符串是什么(没有尾随空格,显示空字符串等)。根据您的要求,它们不是来自readableList
函数本身。
答案 4 :(得分:0)
如果您不想进行切片等操作,下面是一个简单的方法。它可以让您重用已实现的功能(函数调用),还可以轻松更改内部逻辑。
注意:如果列表为空,将返回一个空白字符串
def get_string(l):
s = ""
index = 0
length = len(l)
while index < length:
word = l[index]
if index == length - 1:
s += 'and ' + word
else:
s += word + ", "
index += 1
return s.strip()
# Try
mylist = ['me', 'you', 'him', 'her']
print(get_string(mylist)) # me, you, him, and her
答案 5 :(得分:-1)
要在最后一个元素之前添加元素,您可以这样做
last_element = mylist.pop()
mylist.append(' and ')
mylist.append(last_element)
my_string = ', 'join(mylist[:-2]) + mylist[-2] + mylist[-1]
print(my_string)
或
mylist.insert(-1, ' and ')
my_string = ', 'join(mylist[:-2]) + mylist[-2] + mylist[-1]
print(my_string)
但是LoMaPh在评论中给出的一个更好的答案是:
', '.join(mylist[:-1]) + ' and ' + mylist[-1]