在Python中考虑以下list
。
c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
我想在n
中创建n = len(c)/6
个字符串。因此,对于此示例,预期输出将为:
str1=1|2|3|4|5|6
str2=7|8|9|10|11|12
str3=13|14|15|16|17|18
我如何使用循环?请注意,c
的长度始终是6
的倍数。
答案 0 :(得分:5)
使用comprehension
生成sub-list
块,然后解压缩到变量中:
c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
str1, str2, str3 = (c[i:i+6] for i in range(0, len(c), 6))
或者,如果您确实希望strings
喜欢'1|2|3|4|5|6'
,那么您可以在str.join
上使用sub-lists
,但这需要先将所有内容转换为strings
:
str1, str2, str3 = ('|'.join(map(str, c[i:i+6])) for i in range(0, len(c), 6))
给出:
>>> str1
'1|2|3|4|5|6'
>>> str2
'7|8|9|10|11|12'
>>> str3
'13|14|15|16|17|18'
请注意,在第二个代码段中,您可以使用generator-expression
代替map()
,这通常被认为是更多Pythonic,但它们会为简单的事情占用更多字符(例如转换为{ {1}})。
答案 1 :(得分:1)
>>> c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
>>> str1, str2, str3 = map('|'.join, zip(*[map(str, c)]*6))
>>> str1, str2, str3
('1|2|3|4|5|6', '7|8|9|10|11|12', '13|14|15|16|17|18')
在Python 2上使用from itertools import imap
如果你使用more_itertools
库,你可以看起来更好:
>>> from more_itertools import grouper
>>> c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
>>> str1, str2, str3 = map('|'.join, grouper(6, map(str, c)))
>>> str1, str2, str3
('1|2|3|4|5|6', '7|8|9|10|11|12', '13|14|15|16|17|18')
答案 2 :(得分:1)
您可以使用递归:
c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
multiple=len(c)/6
def hello(c1,g1):
if not c1:
return 0
else:
print(c1[:g1])
return hello(c1[g1:],g1)
print(hello(c,int(len(c)/multiple)))
输出:
[1, 2, 3, 4, 5, 6]
[7, 8, 9, 10, 11, 12]
[13, 14, 15, 16, 17, 18]
答案 3 :(得分:0)
你也可以在这里使用join:
c=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
n = len(c)/3
for i in range(0,len(c),n):
print "|".join(str(x) for x in c[i:i+n])
答案 4 :(得分:0)
使用strings = []
sl_sz = 6
for i in range(0, len(c) / sl_sz):
strings.append("|".join(map(str, c[i*sl_sz:(i + 1)*sl_sz])))
循环将类似于:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button addBuyInButton = (Button) findViewById(R.id.addBuyInButton);
addBuyInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText feeNumEditText = findViewById(R.id.feeNumEditText);
EditText buyInNumEditText =
findViewById(R.id.buyInNumEditText);
TextView targetTextView = findViewById(R.id.targetTextView);
答案 5 :(得分:0)
另一种方法是使用islice
模块中的itertools
:
from itertools import islice
c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
str1, str2, str3 = ["|".join(map(str, list(islice(c,i*6,i*6+6)))) for i in range(len(c)//6)]
print(str1)
print(str2)
print(str3)
输出:
1|2|3|4|5|6
7|8|9|10|11|12
13|14|15|16|17|18