按字母顺序排序列表,特殊情况下的某些起始字母

时间:2016-07-02 13:42:01

标签: python list sorting

给定一个字符串列表,我想以排序的顺序返回一个包含字符串的列表,除了将所有以' x'开头的字符串分组。第一。

例如:

['mix', 'xyz', 'apple', 'xanadu', 'aardvark']

应该屈服:

['xanadu', 'xyz', 'aardvark', 'apple', 'mix']

我知道可以通过制作2个列表并在组合它们之前对每个列表进行排序来完成,但我不确定如何编写其中' x'是第一个角色。

5 个答案:

答案 0 :(得分:7)

sortedlist.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()排序。在这种情况下,keylambda 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")]