如果只有两个项目,或者在最后两个项目之间使用逗号和符号,我试图将列表转换为用&符号连接的单独字符串,例如。
Jones & Ben
Jim, Jack & James
我目前有这个:
pa = ' & '.join(listauthors[search])
并且不知道如何整理逗号/&符问题。初学者如此完整的解释将不胜感激。
答案 0 :(得分:22)
"&".join([",".join(my_list[:-1]),my_list[-1]])
我认为会起作用
或者只是
",".join(my_list[:-1]) +"&"+my_list[-1]
处理只有2项你可以
的边缘情况"&".join([",".join(my_list[:-1]),my_list[-1]] if len(my_list) > 2 else my_list)
答案 1 :(得分:14)
你可以把它分成两个连接。使用", "
加入除最后一项之外的所有项目。然后使用" & "
加入此字符串和最后一项。
all_but_last = ', '.join(authors[:-1])
last = authors[-1]
' & '.join([all_but_last, last])
注意:这不会处理边缘情况,例如authors
为空或只有一个元素时。
答案 2 :(得分:9)
一个班轮。只是将最后一个元素与,
连接起来作为分隔符。然后只需追加&
,然后将最后一个元素追加到最后。
print ', '.join(lst[:-1]) + ' & ' + lst[-1]
如果您希望处理空列表等:
if len(lst) > 1:
print ', '.join(lst[:-1]) + ' & ' + lst[-1]
elif len(lst) == 1:
print lst[0]
答案 3 :(得分:3)
您可以先使用逗号加入所有名称,然后使用正则表达式替换最后一个逗号:
>>> import re
>>> l=['Jim','Jack','James','Zahra','Kasra']
>>> re.sub(r', (\w+)$',r'& \1',' , '.join(l))
'Jim , Jack , James , Zahra & Kasra'
答案 4 :(得分:3)
('{}, '*(len(authors)-2) + '{} & '*(len(authors)>1) + '{}').format(*authors)
此解决方案可以处理长度为>的作者列表。 0,虽然它也可以修改为处理0长度列表。我们的想法是首先创建一个格式字符串,我们可以通过解压缩列表来格式化。这个解决方案避免了对列表进行切片,因此对于大型作者列表来说它应该是相当有效的。
首先,我们为两位作者之外的每位其他作者连接'{}, '
。然后,如果有两个或更多作者,我们会连接'{} & '
。最后,我们为最后一位作者附加'{}'
,但如果我们希望能够处理空的作者列表,则此子表达式可以是'{}'*(len(authors)>0)
。最后,我们通过使用*
解包语法解压缩列表的元素来格式化完成的字符串。
如果您不需要单行代码,请使用高效函数形式的代码。
def format_authors(authors):
n = len(authors)
if n > 1:
return ('{}, '*(n-2) + '{} & {}').format(*authors)
elif n > 0:
return authors[0]
else:
return ''
这可以处理任意长度的作者列表。
答案 5 :(得分:2)
看起来,当我正在处理我的答案时,有人可能会用类似的打败我。这是我的比较。请注意,这也会处理列表中0,1或2个成员的情况。
# Python 3.x, should also work with Python 2.x.
def my_join(my_list):
x = len(my_list)
if x > 2:
s = ', & '.join([', '.join(my_list[:-1]), my_list[-1]])
elif x == 2:
s = ' & '.join(my_list)
elif x == 1:
s = my_list[0]
else:
s = ''
return s
assert my_join(['Jim', 'Jack', 'John']) == 'Jim, Jack, & John'
assert my_join(['Jim', 'Jack']) == 'Jim & Jack'
assert my_join(['Jim',]) == 'Jim'
assert my_join([]) == ''
答案 6 :(得分:1)
只是一个语法更正确的例子:)
add_action( 'pre_get_posts', 'products_pre_get_posts' );
function products_pre_get_posts( WP_Query $query ) {
if ( is_admin() && $query->is_main_query() && $query->query_vars['post_type'] == 'product' ) {
$query->set( 'tax_query', array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => get_terms( array( 'taxonomy' => 'product_cat', 'fields' => 'ids' ) )
)
) );
}
}
输出示例:
def list_of_items_to_grammatical_text(items):
if len(items) <= 1:
return ''.join(items)
if len(items) == 2:
return ' and '.join(items)
return '{}, and {}'.format(', '.join(items[:-1]), items[-1])
答案 7 :(得分:0)
这是一个简单的例子,也适用于空列表或1个元素列表:
' and '.join([', '.join(mylist[:-1])]+mylist[-1:])
它起作用的原因是对于[:-1]和[-1:]的空列表,再次给我们一个空列表
答案 8 :(得分:0)
这是一个处理所有边缘情况(空列表,一个条目,两个条目)的单行示例:
' & '.join(filter(None, [', '.join(my_list[:-1])] + my_list[-1:]))
filter()
函数用于过滤掉my_list
为空或只有一个条目时发生的空条目。