给定一个字符串列表,我想以排序的顺序返回一个包含字符串的列表,除了将所有以' x'开头的字符串分组。第一。
例如:
['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
应该屈服:
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
我知道可以通过制作2个列表并在组合它们之前对每个列表进行排序来完成,但我不确定如何编写其中' x'是第一个角色。
答案 0 :(得分:7)
sorted
或list.sort
接受可选的import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends Activity {
private ArrayList<String> secondArray;
private ListView lv, lv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView);
lv2 = (ListView) findViewById(R.id.listView2);
new Task().execute();
Toast.makeText(MainActivity.this, secondArray.get(0), Toast.LENGTH_LONG).show();
}
class Task extends AsyncTask<Void, Void, ArrayList<String>> {
@Override
protected ArrayList<String> doInBackground(Void... params) {
ArrayList<String> firstArray = new ArrayList<String>();
firstArray.add("item1");
firstArray.add("item2");
firstArray.add("item3");
return firstArray;
}
@Override
protected void onPostExecute(ArrayList<String> strings) {
super.onPostExecute(strings);
secondArray = strings;
}
}
}
关键字参数。这是用于获取排序键的函数,函数的返回值用于比较而不是原始项。
key
使用>>> words = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
>>> sorted(words, key=lambda word: (word[0] != 'x', word))
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
;返回word[0] != 'x'
(0)的单词以False
开头,x
(1)表示其他单词;结果单词以True
开头。
答案 1 :(得分:2)
只需在您的密钥方法中创建一个特定的大小写:如果以x开头,则返回以&#34; 0&#34;开头的截断字符串。因此它将首先出现,但仍会在&#34; x&#34;。
之后排序var re = /weather/gim;
var newre = new RegExp(re.source + "| is", re.flags);
的产率:
z=['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
z.sort(key=lambda x : "0"+x if x.startswith("x") else x)
print(z)
答案 2 :(得分:2)
words = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
result = [i for _, i in sorted((word[0]!='x', word) for word in words)]
答案 3 :(得分:1)
=
sorted()
内置函数返回输入可迭代中每个元素的新的,稳定排序的>>> sorted(['mix', 'xyz', 'apple', 'xanadu', 'aardvark'],
key=lambda x: (not x.startswith('x'), x))
['xanadu', 'xyz', 'aardvark', 'apple', 'mix']
,按list()
排序。在这种情况下,key
是lambda expression(基本上是&#34;迷你函数&#34;),它将输入列表中的每个元素转换或转换为可排序的值。
在这种情况下,我们的lambda表达式对列表中的每个单词进行排序key
,其中包含tuple()
或False
,表示该单词是否以True
开头,接着是单词本身。由于"x"
是&#34;较小&#34;与False
相比,以True
开头的单词首先显示,其他所有内容按字母顺序排序。
答案 4 :(得分:0)
您可以使用内置的list.sort()
对其进行排序,然后使用list comprehension获取您想要的输出,如下所示:
sl = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']
sl.sort()
sl = [el for el in sl if el.startswith("x")]+[el for el in sl if not el.startswith("x")]